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?
您应该配置根记录器:
<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" .../>.