我使用log4net进行日志记录,我有两个appender一个文件和其他eventlog appender。我已在注册表编辑器中注册应用程序,问题是现在两个记录器都在事件查看器中编写。我需要fileAppender
在文件中写入,eventLogAppender
要在事件查看器中显示。
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="file.log"/>
<appendToFile value="false"/>
<layout type="log4net.Layout.PatternLayout">
<header value="Logging Start 
"/>
<footer value="Logging End 
"/>
<conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/>
</layout>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<param name="ApplicationName" value="eventlog" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="LogFileAppender"/>
<appender-ref ref="EventLogAppender" />
</root>
</log4net>
然后在代码中
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// private static readonly ILog log = LogManager.GetLogger("LogFileAppender");
private static readonly ILog logEvents = LogManager.GetLogger("EventLogAppender");
我尝试了不同的东西,但没有人在工作,有什么解决方案吗?
谢谢!
答案 0 :(得分:12)
为了将多个ILog实例与log4net一起使用并为每个ILog实例记录不同的信息,您必须在配置文件的log4net部分配置至少两个Logger元素。
在您的情况下,您有两个目标 - 文件和事件日志。我将它们称为FileLogger和EventLogger。
以下是log4net部分中所需的其他配置示例:
<logger name="FileLogger">
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</logger>
<logger name="EventLogger">
<level value="ALL" />
<appender-ref ref="EventLogAppender" />
</logger>
然后,要在代码中使用每个代码,请将它们实例化为:
private static readonly ILog fileLogger = LogManager.GetLogger("FileLogger");
private static readonly ILog eventLogger = LogManager.GetLogger("EventLogger");
请注意,appender元素的ref属性与您已配置的appender的name属性匹配,并且传递给GetLogger的名称与logger元素的name属性匹配。