log4net无法从app.config文件中读取信息。

29
我有两个配置完全相同的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>

程序.cs

using log4net;

class Program
{
    private static readonly ILog Log = LogManager.GetLogger("SO");

    static void Main(string[] args)
    {
        Log.Info("SO starting");
    }
}

相关帖子 - 使用xml文件配置log4net - RBT
2个回答

52

看起来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)]

5
我的情况大致相同——我将一个项目复制到另一个项目中,但使用我的实用程序代码“包装”了log4net自定义程序集。虽然你提到的魔术行出现在新项目中,但它缺失于我自定义程序集的AssemblyInfo.cs中(我错误地认为所有配置都必须在包含入口点的程序集中完成)。 - hello_earth
2
我必须为一个VB.NET应用程序做这个... 语法:<Assembly: log4net.Config.XmlConfigurator(Watch := true)> - Glen Little
1
之前没有使用过log4net,我花了3个小时试图弄清楚为什么它不起作用,即使设置看起来是正确的,最终才找到问题所在。谢谢!此外,任何库中这样的模糊配置设置都是我抓狂并想离开编程行业的原因... :) - Punit Vora
1
你是个救星! - undefined

1
我的解决方案是在程序的启动代码中使用 XmlConfigurator.Configure()。不过,我的情况与其他人不同,我使用了 Autofac.log4net 模块将 ILog 注册到 Autofac 容器中。在这种情况下,使用 XmlConfiguratorAttribute(并将 Watch 设置为 true 或 false)会导致日志记录器未配置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接