我想创建两个日志文件 - 一个带有“DEBUG”,另一个带有“INFO”日志

时间:2012-10-18 18:06:29

标签: c# .net logging log4net log4net-configuration

我这里有这个log4net配置:

  <log4net>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="LogFileAppender" />
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="D:\logfolder\logfile.txt" />
      <param name="AppendToFile" value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="20MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
      </layout>
    </appender>
  </log4net>

这很好用,但是我想创建另一个仅包含&#34; INFO&#34;的日志文件。输入。是否可以登录两个不同的文件,而不更改我的C#代码中的任何内容,只需更改配置文件?
或者让我们简单地说一下:我需要准确添加什么到我的配置文件?

而且,我还有另一个问题:如果我选择&#34; INFO&#34;而不是&#34; DEBUG&#34;,我得到INFO + ERROR日志。我能以某种方式改变这种情况,而不是获取ERROR日志,只是INFO?谢谢。

1 个答案:

答案 0 :(得分:3)

您可以使用指定的过滤器配置第二个appender,并将其添加到根记录器。

<log4net>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="LogFileAppender" />
      <appender-ref ref="AnotherLogFileAppender" />
    </root>
    <appender name="LogFileAppender" 
              type="log4net.Appender.RollingFileAppender">
      ...
    </appender>
    <appender name="AnotherLogFileAppender" 
              type="log4net.Appender.RollingFileAppender">
      <param name="File" value="D:\logfolder\anotherlogfile.txt" />
      <param name="AppendToFile" value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="20MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" 
               value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="INFO"/>
                <param name="LevelMax" value="INFO"/>
      </filter>
    </appender>
  </log4net>

还考虑使用新式的log4net配置,而不是使用param标签的旧式配置:

<log4net>
    <root>
      <level value="DEBUG" />      
      <appender-ref ref="LogFileAppender" />
      <appender-ref ref="AnotherLogFileAppender" />
    </root>
    <appender name="LogFileAppender"
          type="log4net.Appender.RollingFileAppender">
      <file value="D:\logfolder\logfile.txt"/>
      <appendToFile value="true"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackups value="10"/>
      <maximumFileSize value="20MB"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/>
      </layout>
    </appender>
    <appender name="AnotherLogFileAppender" 
              type="log4net.Appender.RollingFileAppender">
      <file value="D:\logfolder\anotherlogfile.txt"/>
      <appendToFile value="true"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackups value="10"/>
      <maximumFileSize value="20MB"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/>
      </layout>               
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="INFO"/>
      </filter>
    </appender>
  </log4net>