gpt4 book ai didi

c# - Log4net EventLogAppender 仅适用于根记录器,为什么?

转载 作者:行者123 更新时间:2023-11-30 23:08:41 25 4
gpt4 key购买 nike

我有一个控制台应用程序,我尝试使用 EventLogAppender 通过 log4net 登录到 Windows 事件日志。我还有两个 RollingFileAppender,但它们工作正常。

RollingFileAppender 位于根记录器中,配置如下:

<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppenderInfo" />
<appender-ref ref="RollingFileAppenderDebug" />
</root>

EventLogAppender 位于名为 EventLogger 的记录器中,配置如下:

<logger Name="EventLogger">
<level value="INFO" />
<appender-ref ref="EventLogAppenderInfo"/>
<appender-ref ref="EventLogAppenderError"/>
</logger>

这样 EventLogger 从根继承附加程序。如果我用 EventLogger 记录一些东西,它也会被写入日志文件。我之所以这样做,是因为我不想将所有信息条目(仅包含重要信息条目)作为垃圾邮件发送到 Windows 事件日志中。但我也想记录每个错误。

这是我获取记录器的方式:

private static readonly log4net.ILog eventLog = log4net.LogManager.GetLogger("EventLogger");

问题

像这样配置,使用eventlog对象记录任何级别的东西,log4net不写入Windows事件日志,但它写入日志文件,所以root中的附加程序是工作。

如果我将 EventLogAppender 放在根目录下,它们可以正常工作,但它们也会记录我不想记录到事件日志中的 INFO 级别条目。

我不认为这会是权限问题,源已经创建并且可以访问。

这是两个 EventLogAppender,如果有人好奇的话:

<appender name="EventLogAppenderInfo" type="log4net.Appender.EventLogAppender">
<applicationName value="ApplicationName" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{yyyy.MM.dd HH:mm:ss} [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>

<appender name="EventLogAppenderError" type="log4net.Appender.EventLogAppender">
<applicationName value="ApplicationName" />
<layout type="log4net.Layout.PatternLayout">
<IgnoresException value="False"/>
<conversionPattern value="%date{yyyy.MM.dd HH:mm:ss} [%thread] %-5level %logger [%property{NDC}] - %message%newline%exception" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="WARN" />
<levelMax value="FATAL" />
</filter>
</appender>

我想不出为什么 log4net 这样做,如果有人有解决方案,将不胜感激!

干杯!

最佳答案

我认为这是一个区分大小写的问题。

<logger Name="EventLogger">

应该是

<logger name="EventLogger">

关于c# - Log4net EventLogAppender 仅适用于根记录器,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46347744/

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