我正在尝试设置Log4Net(这是我第一次使用Log4Net)来记录程序集中的文本文件。我没有收到任何错误,但它也无法正常工作。我可以断开我记录输出的行,并看到它们已到达,但就像我说没有任何反应。
我哪里错了?
我在packages.config
属性中的<packages>
文件中添加了以下内容:
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender,log4net">
<file value="c:\CTI\log.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="FileAppender"/>
</root>
</log4net>
</configuration>
我已将以下行添加到AssemblyInfo.cs
:
[assembly: log4net.Config.XmlConfigurator(Watch=true)]
我使用NuGet添加了Log4Net程序集,我记录如下:
private log4net.ILog _Log;
_Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
_Log.Debug("FooBar");
就像我说的那样,没有任何错误,但也没有任何反应。
我错过了什么?
答案 0 :(得分:6)
有一件事是你将log4net配置部分添加到nuget配置文件(packages.config
)。
您可以在app / web配置中或在appSettings指向的单独文件中进行配置,例如:
配置位于名为config.log4net
的文件中(文件的copy to output directory
属性设置为copy always
),并在app / web.config中添加以下条目:
<add key="log4net.config" value="config.log4net"/>
如果您不想依赖网络/应用配置,可以在XmlConfiguratorAttribute
中设置AssemblyInfo.cs
属性的ConfigFileExtension属性:
[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "log4net", Watch = true)]
然后将log4net配置文件命名为exe / assembly以及配置的扩展名,例如MyApplication.exe.log4net
或MyLibrary.dll.log4net
另一个错误的是你的appender过滤器。您设置的范围不包括您希望记录的DEBUG级别。以下是logging levels:
ALL
DEBUG
INFO
WARN
ERROR
FATAL
OFF
如您所见,DEBUG
不在INFO
和FATAL
之间。