我正在使用log4net并且在一个类中需要记录到RollingFile appender,但是在另一个类中,我希望登录到事件日志+滚动文件+ console appender。
最佳做法是什么?我能看到一些示例代码吗?
顺便提一下,我正在使用 Castle Windsor Logging Facility 和Log4net来解析我的Logger实例。
如果有帮助的话,我在想下面的内容,但不知道这是不是最佳做法,或者如何根据仍然使用windsor当前记录器实例的'name'激活特定记录器:
log4net.config:
...
<logger name="EventLogOnly">
<level value="ALL" />
<appender-ref ref="EventLogAppender" />
</logger>
<logger name="ConsoleEventLog">
<level value="ALL" />
<appender-ref ref="ColoredConsoleAppender" />
<appender-ref ref="EventLogAppender" />
</logger>
...
城堡温莎容器建造者类:
container.AddFacility("logging.facility",
new LoggingFacility(LoggerImplementation.Log4net, "log4net.config"));
要记录的课程:
private ILogger Logger;
public Test(ILogger logger) {
Logger.Info("Can I log under event log only?");
Logger.Info("Now can I log under both?");
}
谢谢你们。
答案 0 :(得分:13)
您可以通过将过滤器应用于appender来实现此目的。仅当日志事件通过过滤器时,该事件才会被该appender记录。
此过滤器配置将仅记录来自名为“MyLogger”的记录器的事件:
<appender name="EventLogAppender" ...
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="MyLogger" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
...而且这个会将日志消息与某些包含的文本匹配:
<filter type="log4net.Filter.StringMatchFilter">
<stringToMatch value="database" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
过滤器可以进行一些配置。有关详细信息,请参阅log4net SDK或manual的过滤器部分。