【问题标题】:log4net will not read from app.configlog4net 不会从 app.config 中读取
【发布时间】:2010-08-25 12:11:48
【问题描述】:

我有两个为 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");
    }
}

【问题讨论】:

标签: log4net log4net-configuration


【解决方案1】:

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)]

【讨论】:

  • 我的情况大致相同——我将一个项目复制到另一个项目,但是用我的实用程序代码在自定义程序集中“包装”了 log4net——虽然你提到的魔法线在新项目中,但它是从我的自定义程序集的 AssemblyInfo.cs 中丢失(我的印象是所有配置都必须在包含入口点的程序集中完成 - 错误)
  • 我必须为 VB.NET 应用程序执行此操作...语法:
  • 之前没有使用过 log4net,我只花了 3 个小时试图弄清楚为什么它不工作,即使设置看起来正确,然后才登陆。谢谢!此外,任何库中此类晦涩的配置设置都是我拉头发并让我想离开编程行业的原因...... :)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-20
    • 2023-04-08
    • 2011-01-24
    • 1970-01-01
    • 2011-05-12
    • 2012-07-30
    • 1970-01-01
    • 2018-12-27
    相关资源
    最近更新 更多