在log4net中启用日志级别

Bra*_*adV 11 log4net app-config

我正在编写一个简单的测试项目来试验log4net,而且我已经立即打了一个墙.无论我在配置文件中执行什么操作,都会初始化我的记录器,并将所有"IsXXXXEnabled"标志设置为false.这是我非常简单的app.config:

  <log4netgroup>
    <log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
        <param name="LogName" value="Application" />
        <param name="ApplicationName" value="HelloProgram" />
        <threshold value="DEBUG"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger - %newline%message" />
        </layout>
      </appender>

      <root>
        <level value="DEBUG" />
        <appender-ref ref="EventLogAppender" />
      </root>
      <logger name="HelloLogger">
        <level value="DEBUG" />
        <appender-ref ref="EventLogAppender" />
      </logger>
    </log4net>
  </log4netgroup>
Run Code Online (Sandbox Code Playgroud)

以下是Main中的简单测试:

    ILog Log = LogManager.GetLogger("HelloLogger");

    if(Log.IsErrorEnabled)
        Console.WriteLine("The logger is working!");
    else
        Console.WriteLine("Nope");
Run Code Online (Sandbox Code Playgroud)

输出是"不".我尝试将阈值和级别值切换为"ALL",但没有任何改变.这看起来很简单,我错过了什么来启用一切?谢谢

Bra*_*adV 16

固定它!我不知道为什么在log4net手册中没有提到这个调用或为什么我特别需要它,但是将这个程序集添加到我的项目中启用了所有日志级别:

[assembly:XmlConfigurator(Watch = true)]
Run Code Online (Sandbox Code Playgroud)

在此处找到: 如何配置log4net以使log.IsDebugEnabled为true?

  • @Stefan,谢谢你的链接.我想当我说"这在log4net手册中没有提到"时,我的意思是"我在阅读手册时非常糟糕". (3认同)

Aas*_*set 5

您应该配置根记录器

<root>
    <level value="DEBUG" />
    <appender-ref ref="EventLogAppender" />
</root>
Run Code Online (Sandbox Code Playgroud)

任何非根记录器(您创建的记录器<logger name="...">)仅适用于名称空间限定名称以记录器名称作为前缀的类。因此,您创建的记录器仅适用于命名空间之外且名称为 的HelloLogger类,或驻留在名为 的命名空间中的任何类HelloLogger(并且可能位于嵌套在该命名空间内的命名空间内)。(当我说一个记录器“适用于”一个类时X,我的意思是当你调用它时你会得到这个记录器LogManager.GetLogger(typeof(X))。)

编辑:您还需要调用log4net.Config.XmlConfigurator.Configure();才能让 log4net 读取App.config. 此外,删除最外面的<log4netgroup>元素并重命名配置部分名称:<section name="log4net" .../>.