在log4net中启用日志级别

时间:2011-03-09 23:11:39

标签: 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>

以下是Main中的简单测试:

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

    if(Log.IsErrorEnabled)
        Console.WriteLine("The logger is working!");
    else
        Console.WriteLine("Nope");

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

4 个答案:

答案 0 :(得分:16)

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

[assembly:XmlConfigurator(Watch = true)]

在此处找到: How do I configure log4net so that log.IsDebugEnabled is true?

答案 1 :(得分:4)

您应该配置根记录器

<root>
    <level value="DEBUG" />
    <appender-ref ref="EventLogAppender" />
</root>

任何非root记录器(使用<logger name="...">创建的记录器)仅适用于名称空间限定名称具有记录器名称作为前缀的类。因此,您创建的记录器将仅应用于名称空间之外且名称为HelloLogger的类,或者应用于驻留在名为HelloLogger的名称空间中的任何类(并且可能在嵌套在名称空间内的名称空间中)一)。 (当我说记录器“适用于”类X时,我的意思是那是你拨打LogManager.GetLogger(typeof(X))时会得到的记录器。)

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

答案 2 :(得分:0)

配置根记录器并非绝对必要,但Aasmund的参数肯定是有效的。我认为问题是你尝试使用EventLogAppender。对于简单测试,您应该使用ConsoleAppender,因为这可能是您可以在控制台应用程序中工作的最简单的附加程序。

EventLogAppender需要一些额外的步骤来设置:您需要创建一个事件源,并且需要管理权限。 Appender尝试动态执行此操作,但如果打开UAC,它通常会无声地失败。要查看是否存在问题,您可以尝试启用internal debugging

通常你会create一个带有安装程序的事件源。

答案 3 :(得分:0)

如果您正在为log4net使用单独的配置文件,请执行以下操作:按照所有其他设置说明操作后,确保右键单击visual studio解决方案资源管理器中的文件,选择属性,展开“高级”选项组,将“复制到输出目录”值设置为“始终复制”。那将是魔术...... :)欢呼!!