另一个 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 日志方法时,它不应该在数据库中结束,但它总是如此。所以,不知何故我的配置错误。这只是我浏览过的几个,它们给了我洞察力,但不是解决方案:

这是一些代码:

配置:

  <!--<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>