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="Log\Operation.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="Log\Error.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目录下的日志文件可以看到操作日志写了一条,

错误日志写了两条:

源码下载(微云)

 

 

 

posted @ 2015-01-09 11:53  漫漫江雪  阅读(751)  评论(0编辑  收藏  举报