zoukankan      html  css  js  c++  java
  • log4net生成多个日志文件

    使用Log4Net日志组件时,经常会碰到这样一种场景,我想把错误的日志记录在Error.log文件中,而把操作的日志放在Operation.log文件中

    经过几番尝试,终于实现了,在此把Log4Net的简单使用记录下来:

     

    首先新建一个空Web应用程序,使用Nuget添加对log4net的引用:

     

    将准备好的log4net.config配置文件放到程序根目录(注释在文件中):

     

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      </configSections>
      <appSettings>
      </appSettings>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>    
      </configSections>
        <log4net>
          <logger name="OperationLog">
            <level value="INFO"/>
            <appender-ref ref="OperationLogAppender" />
          </logger>
          <logger name="ErrorLog">
            <level value="INFO"/>
            <appender-ref ref="ErrorLogAppender" />
          </logger>
          <!--定义输出到文件中-->
          <appender name="OperationLogAppender"  type="log4net.Appender.RollingFileAppender">
            <!--输出日志文件的路径-->
            <file value="LogOperation.log" />
            <!--输出日志时自动向后追加-->
            <appendToFile value="true" />
            <!--防止多线程时不能写Log,官方说线程非安全,但实际使用时,本地测试正常,部署后有不能写日志的情况-->
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
            <!--置为true,当前最新日志文件名永远为file节中的名字-->
            <staticLogFileName value="false" />
            <!--日志以大小作为备份样式,还有一种方式是Date(日期)-->
            <rollingStyle value="size" />
            <countDirection value="-1" />
            <!--单个日志的最大容量,(可用的单位:KB|MB|GB)不要使用小数,否则会一直写入当前日志-->
            <maximumFileSize value="1MB" />
            <!--日志最大个数,都是最新的-->
            <maxSizeRollBackups value="10" />
            <datePattern value='"."yyyy-MM-dd".log"' />
            <layout type="log4net.Layout.PatternLayout">
              <!--每条日志末尾的文字说明
              <footer value="**************************************************************" />-->
              <!--输出格式-->
              <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass  - info-->
              <conversionPattern  value="%newline%d{yyyy/MM/dd,HH:mm:ss.fff},[%-5level] Message:%message%newline" />
            </layout>
          </appender>
          <!--定义输出到文件中-->
          <appender name="ErrorLogAppender"  type="log4net.Appender.RollingFileAppender">
            <!--输出日志文件的路径-->
            <file value="LogError.log" />
            <!--输出日志时自动向后追加-->
            <appendToFile value="true" />
            <!--防止多线程时不能写Log,官方说线程非安全,但实际使用时,本地测试正常,部署后有不能写日志的情况-->
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
            <!--置为true,当前最新日志文件名永远为file节中的名字-->
            <staticLogFileName value="false" />
            <!--日志以大小作为备份样式,还有一种方式是Date(日期)-->
            <rollingStyle value="size" />
            <countDirection value="-1" />
            <!--单个日志的最大容量,(可用的单位:KB|MB|GB)不要使用小数,否则会一直写入当前日志-->
            <maximumFileSize value="1MB" />
            <!--日志最大个数,都是最新的-->
            <maxSizeRollBackups value="10" />
            <datePattern value='"."yyyy-MM-dd".log"' />
            <layout type="log4net.Layout.PatternLayout">
              <!--每条日志末尾的文字说明
              <footer value="**************************************************************" />-->
              <!--输出格式-->
              <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass  - info-->
              <conversionPattern  value="%newline%d{yyyy/MM/dd,HH:mm:ss.fff},[%-5level] %logger Message:%message%newline" />
            </layout>
            <!-- 日志等级过滤 可以适用于这种场景,root下记录所有的日志,而Error以上级别的日志再记录到另外一个日志文件中,方便查错
            <filter type="log4net.Filter.LevelRangeFilter">
              <levelMin value="ERROR" />
              <levelMax value="FATAL" />
            </filter>-->
          </appender>
        <root>
              <level value="ALL"/>
        </root>
      </log4net>
    </configuration>
    折叠展开

     

    接下来我们要告诉应用程序的log4net日志组件使用上面的定义好的log4net.config配置文件,方式是在global.asax.cs代码里面加入以下代码(这是Web应用程序的使用方式,Winform不同):

     

    log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("log4net.config")));
    

     

    最后在HomeController中使用日志:

     

    public ActionResult Index()
            {
                log4net.ILog opLog = log4net.LogManager.GetLogger("OperationLog");  //记录一条操作日志
                opLog.Info("这是一条操作日志");
    
                log4net.ILog errorLog = log4net.LogManager.GetLogger("ErrorLog");     //记录错误日志
                errorLog.Info("这是一条错误日志");
                errorLog.Info("这是另一条错误日志---------------------------------");
                return View();
            }
    

     

    F5运行应用程序,查看Log目录下的日志文件可以看到操作日志写了一条,

    错误日志写了两条:

    源码下载(微云)

     

     

     

  • 相关阅读:
    着迷英语900句总结
    SQL Server 常见数据类型
    SQL Server视频总结
    第三次SLA文档学习
    Rosetton Stone Summary
    【周总结】2018-10-19—2018-11-25
    学生信息管理系统总结
    VB中 EOF 和 BOF 的区别
    VB中 On error 的用法
    VB中 . 与 ! 的区别
  • 原文地址:https://www.cnblogs.com/jancyxue/p/4212952.html
Copyright © 2011-2022 走看看