对于log4net,您是否指定要使用哪个追加器?
本文关键字:追加 log4net 是否 对于 | 更新日期: 2023-09-27 18:12:26
当你有两个appender,比如一个用于调试错误,一个用于产品错误,在你的代码中,你是显式地创建两个日志类,还是一个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.");
将记录到日志文件和事件查看器中。
UPDATE:关于你的过滤问题,如果你有:
<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>
然后是Com下的所有东西。Foo将在WARN或更高级别记录日志,但其他所有内容将在DEBUG或更高级别记录日志....