另一个log4net配置问题。根记录器(或单个,命名记录器)具有不同的阈值

时间:2017-05-15 18:19:42

标签: logging log4net-configuration threshold

我有一个C#Framework 4.5.2项目,使用log4net v2.0.8(通过NuGet安装),我已经阅读了至少十个不同但相似的问题,但没有一个能解决我的问题。当然,我可以成功写入我的日志追加器,但过滤/阈值不起作用。我有一个记录器(使用ROOT或命名实例)并设置了不同的阈值/过滤器,应该指示实际的日志记录使用特定的appender(即文件,db,smtp等)。这样,某个级别的过滤器值可能只能由单个appender处理。为了测试,我只是试图获得警告和以上阈值来使用ADO appender,而文件appender记录Info(及以上)阈值。因此,当我测试Info日志方法时,它不应该在db中结束,但它总是这样做。所以,不知怎的,我的配置有误。以下是我看过的一对夫妇,他们给了我洞察力,但不是解决方案:

以下是一些代码:

配置:

  <!--<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中设置一个阈值,我已经在appender中直接使用了它。我已经使用了LevelMatchfilter,包含level和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。是否有更新版本的内容,或者我只是遗漏了其他内容,或者是以错误的顺序执行此操作?任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

我看到两件事。 首先,它的警告,而不是警告。

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