c# - 使用 log4net,您是否指定要使用哪个附加程序?

标签 c# log4net

当您有 2 个 appender 时,比如一个用于调试错误,一个用于产品错误,在您的代码中,您是否显式创建 2 个日志类,或者一个 appender 基本上会写入满足特定条件的任何日志消息?

因此在您的代码中,您使用单一的日志方法,并且根据您的 appender 的设置方式,它会记录消息,例如从特定的命名空间记录,或者是特定的日志级别。

所以它可能将单个日志条目写入 2 个日志文件?

最佳答案

是的,您可以将单个日志语句发布到多个附加程序。只要满足每个条件,它就会使用每个附加程序。

例如,以这个配置部分为例,它将所有消息记录到文件,并将警告和错误记录到事件查看器。:

 <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="c:\logs\MySite"/>
      <appendToFile value="true"/>
      <datePattern value=".yyyy-MM-dd.\l\o\g"/>
      <rollingStyle value="Date"/>
      <MaxSizeRollBackups value="14"/>
      <param name="StaticLogFileName" value="false"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{HH:mm:ss.fff} [%thread] %-5level %logger{1} - %m%n"/>
      </layout>
    </appender>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <applicationName value="Trading.Web"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{HH:mm:ss.fff} [%thread] %-5level %logger{1} - %m%n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="WARN"/>
        <param name="LevelMax" value="ERROR"/>
      </filter>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingFileAppender"/>
      <appender-ref ref="EventLogAppender" />
    </root>
  </log4net>

所以这样:

  _log.Debug("This is a debug message");

只会出现在日志文件中(因为它不符合事件日志附加程序的过滤条件)。

但是这个:

  _log.Error("This is an error message.");

将记录到日志文件和事件查看器。

更新:关于您的过滤问题,如果您:

<root>
  <level value="DEBUG"/>
  <appender-ref ref="RollingFileAppender"/>
</root>

<!-- Print only messages of level WARN or above in the namespace Com.Foo -->
<logger name="Com.Foo">
    <level value="WARN" />
</logger>

如果 WARN 或更高级别,Com.Foo 下的所有内容都会记录,但其他所有内容都会在 DEBUG 或更高级别记录....

关于c# - 使用 log4net,您是否指定要使用哪个附加程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7890462/

相关文章:

logging - 温莎城堡的内部日志

c# - VS2013 调试/Windows/任务 : "No tasks to display"

c# - 打开 XML SDK 将 double 值写入 Excel 单元格

java - 与多个监听器的简单进程间通信

c# - 如何实例化新的结构对象?

c# - Log4net 不记录到数据库

c# - Boolean int 转换问题

log4net - 如何在Quartz.Net中从Log4Net切换到NLog?

log4net - 如何配置 log4net 以在 CRM 2011 插件中工作?

c# - 如何在 Log4Net 中记录运行时间