log4net将无法从app.config中读取

时间:2010-08-25 12:11:48

标签: log4net log4net-configuration

我为log4net配置了两个相同的项目。一个项目记录正常;但是,另一个根本没有记录。

项目中未记录的Logger会返回IsFatalEnabled = falseIsErrorEnabled = falseIsWarnEnabled = falseIsInforEnabled = falseIsDebugEnabled = 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");
    }
}

2 个答案:

答案 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)使记录器未配置。