【发布时间】:2016-08-15 11:43:06
【问题描述】:
我正在使用 log4net,我正在尝试使用过滤器,以便只有一个附加程序可以写入特定文件。
谁能告诉我为什么这不起作用?我只希望名为“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);
【问题讨论】:
-
FWIW,我认为你偏离了 log4net 设计为使用这种方法的方式 - 你的代码不应该知道它正在记录到
ErrorLogFileAppender,它应该只在右侧登录级别 - 担心您的配置中实际记录的内容和位置。 -
好主意。会看一些变化。但是我的过滤器问题仍然存在
-
哦,是的,如果您只想记录来自特定组件的错误,您仍然需要过滤器等以某种方式工作。或者仅设置该记录器以使用该附加程序...
-
请检查这个答案以及 - stackoverflow.com/questions/3685965/…
-
你不知道为什么我的过滤器不起作用.. :)?