1

我在这里有这个 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>

这运作良好,但我想创建另一个只有“INFO”输入的日志文件。是否可以登录两个不同的文件,而不更改我的 C# 代码中的任何内容,只需更改配置文件?
或者让问题简单化:我必须在我的配置文件中添加什么?

而且,我还有另一个问题:如果我选择“INFO”而不是“DEBUG”,我会得到 INFO + ERROR 日志。我可以以某种方式更改它,而不是获取错误日志,只是获取信息?谢谢你。

4

1 回答 1

3

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

<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>
于 2012-10-18T18:11:32.430 回答