gpt4 book ai didi

c# - 使用 log4net 写入不同的记录器

转载 作者:IT王子 更新时间:2023-10-29 04:46:54 27 4
gpt4 key购买 nike

我正在使用 log4net 进行日志记录。我希望它同时写入文件和事件日志。

出于某种原因,我在我的日志文件中找到了两次消息。

这是我的 app.config 部分:

<log4net>
<root>
<level value="INFO" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="EventLogAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="c:\temp\DIS-logfile.txt" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<param name="Indigo.DataIntakeService" value="eventlog" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>

在我的代码中,我必须遵循以下内容:

private static readonly ILog Log = log4net.LogManager.GetLogger("DataIntakeService");
private static readonly ILog LogEvents = log4net.LogManager.GetLogger("EventLogAppender");

static void Main(string[] args)
{
log4net.Config.XmlConfigurator.Configure();
}

public static void LogInfo(string message)
{
Log.Info(message);
LogEvents.Info(message);
}

它按要求写入我的日志文件,但消息也应该发送到我的事件查看器,但并没有发生。它还将这些消息写入日志文件。

我哪里出错了?

最佳答案

您已配置 Log4Net,以便根记录器记录到文件和事件日志附加程序。所有记录器都继承此配置,因此您的记录器“DataIntakeService”和“EventLogAppender”都会记录到这些附加程序。

如果您在事件查看器中看不到日志消息,可能是因为您的应用程序没有创建事件源的权限。

更新

How can i configure it so the DataIntakeService logs to the file and the other one to the eventviewer ?

这是一个示例配置:

<log4net>
<root>
<level value="INFO" />
<appender-ref ref="LogFileAppender" />
</root>
<logger name="EventLogAppender" additivity="False">
<level value="INFO" />
<appender-ref ref="EventLogAppender" />
</logger>
<appender>
...

使用这个示例:

  • 根记录器(以及所有子记录器,除非另外明确配置)将记录到 LogFileAppender。您的 DataIntakeService 记录器未明确配置,因此会继承此配置。

  • EventLogAppender 记录器明确配置为记录到 EventLogAppender,并且配置为不继承父记录器的设置 (additivity="false")。因此它不会记录到 LogFileAppender。如果您设置 additivity="true",它将继承设置并记录到 LogFileAppenderEventLogAppender

顺便说一下,命名记录器 EventLogAppender 可能有点困惑:EventLogLogger 可能是一个更好的名字。

关于c# - 使用 log4net 写入不同的记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17106559/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com