我正在编写一个简单的测试项目来试验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”,但没有任何改变。这看起来很简单,我错过了什么来启用一切? 感谢
答案 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解决方案资源管理器中的文件,选择属性,展开“高级”选项组,将“复制到输出目录”值设置为“始终复制”。那将是魔术...... :)欢呼!!