另一个 log4net 配置问题。具有不同阈值的根记录器(或单个命名记录器)
Yet another log4net configuration issue. Root logger (or single, named logger) with different thresholds
我有一个 C# Framework 4.5.2 项目,使用 log4net v2.0.8(通过 NuGet 安装),我至少阅读了十个不同但相似的问题,其中 none 解决了我的问题问题。当然,我可以成功写入我的日志附加程序,但 filtering/threshold 不工作。我有一个记录器(使用 ROOT 或命名实例)并设置了不同的 thresholds/filters 应该指示实际日志记录使用特定的附加程序(即文件、数据库、smtp 等)。这样,特定级别的过滤器值可能只能由单个附加程序处理。为了进行测试,我只是试图获取警告和高于阈值以使用 ADO 附加程序,而文件附加程序记录信息(及以上)阈值。因此,当我测试 Info 日志方法时,它不应该在数据库中结束,但它总是如此。所以,不知何故我的配置错误。这只是我浏览过的几个,它们给了我洞察力,但不是解决方案:
- log4net-logging-of-two-different-levels-to-two-different-appenders-for-the-same
- log4net-appender-threshold-not-working
这是一些代码:
配置:
<!--<root>
</root>-->
<logger name="Logger">
<appender-ref ref="LogFileAppender"/>
<appender-ref ref="AdoNetAppender"/>
</logger>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:\temp\logging\derp.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %property{ProjectName} (%logger) - %message%newline" />
</layout>
<!--<threshold value="Info" />-->
</appender>
我试过在记录器部分的 appender-ref 中设置一个 Threshold,我已经直接在 appender 中设置了它。我使用了 LevelMatchfilter,同时具有级别和 levelMin/levelMax(见下文)。 LevelRangeFilter,什么都没有。没有什么能正常工作。
<filter type="log4net.Filter.LevelMatchFilter">
<levelMin value="Warning" />
<levelMax value="Fatal" />
</filter>
<threshold value="Warning" />
我试过合并 Evaluator,但没用。
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR" />
</evaluator>
网上的例子大多都是5+岁的,经常说v1.2。新版本中是否有此内容,或者我只是遗漏了其他内容,或者以错误的顺序进行了操作?任何帮助表示赞赏。谢谢!
我看到两件事。
首先,它是警告,而不是警告。
<filter type="log4net.Filter.LevelMatchFilter">
<levelMin value="WARN" />
<levelMax value="Fatal" />
</filter>
其次,像这样添加根。
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="AdoNetAppender" />
</root>
我有一个 C# Framework 4.5.2 项目,使用 log4net v2.0.8(通过 NuGet 安装),我至少阅读了十个不同但相似的问题,其中 none 解决了我的问题问题。当然,我可以成功写入我的日志附加程序,但 filtering/threshold 不工作。我有一个记录器(使用 ROOT 或命名实例)并设置了不同的 thresholds/filters 应该指示实际日志记录使用特定的附加程序(即文件、数据库、smtp 等)。这样,特定级别的过滤器值可能只能由单个附加程序处理。为了进行测试,我只是试图获取警告和高于阈值以使用 ADO 附加程序,而文件附加程序记录信息(及以上)阈值。因此,当我测试 Info 日志方法时,它不应该在数据库中结束,但它总是如此。所以,不知何故我的配置错误。这只是我浏览过的几个,它们给了我洞察力,但不是解决方案:
- log4net-logging-of-two-different-levels-to-two-different-appenders-for-the-same
- log4net-appender-threshold-not-working
这是一些代码:
配置:
<!--<root>
</root>-->
<logger name="Logger">
<appender-ref ref="LogFileAppender"/>
<appender-ref ref="AdoNetAppender"/>
</logger>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:\temp\logging\derp.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %property{ProjectName} (%logger) - %message%newline" />
</layout>
<!--<threshold value="Info" />-->
</appender>
我试过在记录器部分的 appender-ref 中设置一个 Threshold,我已经直接在 appender 中设置了它。我使用了 LevelMatchfilter,同时具有级别和 levelMin/levelMax(见下文)。 LevelRangeFilter,什么都没有。没有什么能正常工作。
<filter type="log4net.Filter.LevelMatchFilter">
<levelMin value="Warning" />
<levelMax value="Fatal" />
</filter>
<threshold value="Warning" />
我试过合并 Evaluator,但没用。
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR" />
</evaluator>
网上的例子大多都是5+岁的,经常说v1.2。新版本中是否有此内容,或者我只是遗漏了其他内容,或者以错误的顺序进行了操作?任何帮助表示赞赏。谢谢!
我看到两件事。 首先,它是警告,而不是警告。
<filter type="log4net.Filter.LevelMatchFilter">
<levelMin value="WARN" />
<levelMax value="Fatal" />
</filter>
其次,像这样添加根。
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="AdoNetAppender" />
</root>