我为log4net配置了两个相同的项目。一个项目记录正常;但是,另一个根本没有记录。
项目中未记录的Logger
会返回IsFatalEnabled = false
,IsErrorEnabled = false
,IsWarnEnabled = false
,IsInforEnabled = false
和IsDebugEnabled = false
。
我已经从一个项目复制并粘贴到另一个项目中,完全替换了文件并尝试删除所有空格。
什么可能导致一个项目无法从app.config中正确读取正确的级别?
的app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="logfile.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date: %-5level – %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="FileAppender" />
</root>
</log4net>
</configuration>
Program.cs的
using log4net;
class Program
{
private static readonly ILog Log = LogManager.GetLogger("SO");
static void Main(string[] args)
{
Log.Info("SO starting");
}
}
答案 0 :(得分:42)
似乎app.config文件未配置为由log4net监视。
我将以下行添加到AssemblyInfo.cs
,现在已启用日志记录:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
很奇怪,因为我没有将这一行添加到正在运行的项目中。
编辑:
看起来正在运行的项目确实有这条线。我一定忘了。
// This will cause log4net to look for a configuration file
// called [ThisApp].exe.config in the application base
// directory (i.e. the directory containing [ThisApp].exe)
// The config file will be watched for changes.
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
答案 1 :(得分:1)
对我来说,解决方案是在程序的启动代码中使用XmlConfigurator.Configure()
。但是,我的情况有所不同,因为我使用的是Autofac.log4net模块在Autofac容器中注册ILog
。在这种情况下,使用XmlConfiguratorAttribute
(将Watch
设置为true或false)使记录器未配置。