当你有两个appender,比如一个用于调试错误,一个用于产品错误时,在你的代码中,你是显式创建2个日志类还是一个appender基本上会编写任何符合特定条件的日志消息?
因此,在您的代码中,您使用单个日志方法,并且根据您的appender的设置方式,它将记录消息,例如,如果它是从特定命名空间记录的,或者是某个日志级别.
因此可能将一个日志条目写入2个日志文件?
是的,您可以将单个日志语句发布到多个appender.只要它符合每个标准,它就会使用每个appender.
例如,使用此配置部分,它将所有消息记录到文件,并将警告和错误记录到事件查看器:
<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>
Run Code Online (Sandbox Code Playgroud)
所以这:
_log.Debug("This is a debug message");
Run Code Online (Sandbox Code Playgroud)
将仅出现在日志文件中(因为它不符合事件日志appender的过滤条件).
但是这个:
_log.Error("This is an error message.");
Run Code Online (Sandbox Code Playgroud)
将记录日志文件和事件查看器.
更新:关于您的过滤问题,如果您有:
<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>
Run Code Online (Sandbox Code Playgroud)
然后Com.Foo下的所有东西都会记录WARN或更高,但其他一切都会记录DEBUG或更高......
| 归档时间: |
|
| 查看次数: |
1693 次 |
| 最近记录: |