当前位置: 首页 > 知识库问答 >
问题:

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

於乐语
2023-03-14

我有一个C#Framework 4.5.2项目,使用log4net v2.0.8(通过NuGet安装),我读过至少十个不同但相似的问题,但没有一个解决了我的问题。当然,我可以成功写入日志附加器,但筛选/阈值不起作用。我有一个单独的记录器(使用ROOT或命名实例),并设置了不同的阈值/过滤器,这些阈值/过滤器应引导实际日志使用特定的附加程序(即文件、db、smtp等)。这样,特定级别的筛选器值可能仅由单个附加器处理。对于测试,我只是尝试使用ADO appender获取警告和高于阈值的信息,而文件appender记录信息(和高于阈值)。所以,当我测试一个信息日志方法时,它不应该在数据库中结束,但它总是这样。所以,不知怎么的,我把配置搞错了。以下是我看过的几篇文章,它们给了我深刻的见解,但不是解决方案:

  • log4net将两个不同级别的日志记录到同一个
  • log4net appender阈值不工作

这里有一些代码:

配置:

  <!--<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(见下文)。LevelRange过滤器,什么都没有。没有什么能正常工作。

<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个答案

邴姚石
2023-03-14

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

<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>
 类似资料:
  • 我们有两个不同的ASP.NET应用程序启用了Log4net日志记录。它们都有相同的log4net1.2.10.0版本。

  • 如何在SL4J中配置日志记录?我的项目有很多类:class1、class2、Class3....我想做两件事:将所有类记录到一个名为FILE1的文件追加器中,并具有警告级别(class1、class2、class3...)将一个名为class1的类记录到具有调试级别的名为FILE2的文件追加器中。 问题是,当我将class1的记录器配置为具有WARN级别的FILE1 appender时,我不知道如

  • 我正在使用2个appender-控制台和自定义appender,称为MyAppender,它应该忽略所有级别低于ERROR的消息(也就是说,它应该只支持ERROR和FATAL)。控制台应该能够支持所有级别。我尝试了几种方法来定义它,但似乎过滤器不适用于根级附加器。如何实现这一点?我当前的log4j2定义:

  • 由此我从NetBeans得到以下错误消息: 所有异常消息都写入控制台,包括用户日志的消息。所以我知道两个伐木工都在工作。记录器附加器写入文件OK。userLog记录器不会创建任何文件,它使用几乎相同的附加器。 看来我还没有正确地命名一些东西来允许log4j2找到记录器。我试过各种命名的组合来弄对它,但我搞不清问题出在哪里。 我必须在每个类的记录器初始化中包含类名吗? 编辑:我需要包含包名。我花了一

  • 我有两张桌子: 我需要从表1中选择记录,其中Value1或Value2不同于表1\u中用相同的键1、键2和键3详细描述的值1和/或值2的总和。此外,我还需要表之间的值差,例如,上面我需要查询返回: 我尝试了很多方法来解决这个问题,但我错过了一些东西,我将非常感谢任何帮助。