【发布时间】:2018-03-16 02:11:17
【问题描述】:
我有一个使用文件附加程序和控制台附加程序的记录器。我的代码中有一行我只想转到控制台附加程序。有没有办法在不制作一段时间新记录器的情况下做到这一点?
或者,我可以制作另一个只使用控制台的记录器,但我似乎无法完成。我能找到的所有示例都使用类或方法名称。我正在尝试使用我在 app.config 中提供的名称。
这是我的应用配置:
<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<!-- Pattern to output the caller's file name and line number -->
<conversionPattern value="%level [%thread] %date - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="All" />
</filter>
</appender>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="D:\Something\Log\IntegrationTests\IntegrationTests.log" />
<appendToFile value="false" />
<rollingStyle value="Size" />
<maximumFileSize value="250MB" />
<maxSizeRollBackups value="20" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level [%thread] %date - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="All" />
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="Console" />
<appender-ref ref="RollingFile" />
</root>
<logger name="consoleOnly">
<level value="ALL" />
<appender-ref ref="Console" />
</logger>
</log4net>
这是我尝试获取“consoleOnly”记录器的行。
ILog log = LogManager.GetLogger("consoleOnly");
log.Debug("Poop");
我是这样的吗?
【问题讨论】:
-
您可以过滤特定记录器的日志消息(例如claassen.net/geek/blog/2009/06/log4net-filtering-by-logger.html)
-
不是我想要的。还不如创建另一个只有一个控制台附加程序的记录器,但甚至无法弄清楚如何在配置和代码中按名称获取一个记录器。希望已经在使用的记录器上有一些方便的方法。
-
虽然,如果你非常想用代码来做,你总是可以使用
Console.WriteLine来写你的信息。但是,我真的建议过滤器是要走的路(除非您可以解释更多关于您想要实现的目标的上下文 - 根据您当前的问题,appender filters is 的正确答案log4net 视角)。 -
一个过滤器,如果我理解正确的话,要么记录一条符合该过滤器标准的消息,要么不记录。不?您不会在 appender 级别应用过滤器,而是在 logger 级别应用过滤器,对吗?