Log4net过滤器不起作用
本文关键字:不起作用 过滤器 Log4net | 更新日期: 2023-09-27 18:02:37
我正在使用log4net,我正在尝试使用过滤器,以便只有一个appender可以写入特定的文件。
谁能告诉我为什么这不起作用?我想只添加名为"ErrorLogFileAppender"写入文件..
<appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="..''WebErrors.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %logger{1} %m%n" />
</layout>
<filter type="log4net.Filter.LoggerMatchFilter">
<!-- allows this sub-namespace to be logged... -->
<loggerToMatch value="ErrorLogFileAppender" />
</filter>
</appender>
这就是我如何得到应该能够写入文件的记录器:
private static ILog _fileLogger = LogManager.GetLogger("ErrorLogFileAppender");
但是这个记录器(在另一个类中使用)也可以写入同一个文件,这是错误的:
private static ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
来自文档:
过滤器形成事件必须通过的链。沿途的任何过滤器都可以接受事件并停止处理,拒绝事件并停止处理,或者允许事件进入下一个过滤器。如果事件到达过滤器链的末端而没有被拒绝,它将被隐式接受并将被记录。
(强调我的)
由于您没有一个过滤器来拒绝不是和ErrorLogFileAppender
的任何内容,因此所有内容仍将被记录。您可以通过包含DenyAllFilter
:
<filter type="log4net.Filter.LoggerMatchFilter">
<!-- allows this sub-namespace to be logged... -->
<loggerToMatch value="ErrorLogFileAppender" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
或者,您可以配置log4net,以便只有记录器使用该appender,例如:
<logger name="ErrorLogFileAppender">
<appender-ref ref="ErrorLogFileAppender" />
</logger>