29

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

未记录的Logger项目中的IsFatalEnabled = falseIsErrorEnabled = falseIsWarnEnabled = false和。IsInforEnabled = falseIsDebugEnabled = false

我已经从一个项目复制并粘贴到另一个项目,完全替换了文件并尝试删除所有空格。

什么可能导致一个项目无法从 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");
    }
}
4

2 回答 2

50

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)]
于 2010-08-25T12:23:23.410 回答
1

我的解决方案是XmlConfigurator.Configure()在程序的启动代码中使用。但是,我的情况有所不同,因为我使用 Autofac.log4net 模块ILog在 Autofac 容器中注册。在这种情况下,使用XmlConfiguratorAttributeWatch设置为 true 或 false)未配置记录器。

于 2019-07-11T10:58:24.653 回答