log4net watch不重新加载配置

时间:2013-09-17 06:42:26

标签: log4net

我正在尝试编写一个在更改配置文件时更改日志记录级别的应用程序。

class Program
{
    private static readonly ILog log = LogManager.GetLogger(typeof(Program));

    static void Main(string[] args)
    {
        XmlConfigurator.ConfigureAndWatch(new FileInfo(@"log4net.config"));

        do
        {
            log.Debug("Hello World!");
            log.Info("I'm a simple log4net tutorial.");
            log.Warn("... better be careful ...");
            log.Error("ruh-roh: an error occurred");
            log.Fatal("OMG we're dooooooomed!");
            Thread.Sleep(1000);
        } while (true);
     }

我的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="c:\log-file.txt" />
      <appendToFile value="true" />
      <encoding value="utf-8" />
      <layout type="log4net.Layout.SimpleLayout" />
    </appender>

    <root>
      <level value="FATAL" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
</configuration>

据我所知(如果我错了,请纠正我),监视部分意味着在更改文件时重新加载XML配置。我尝试在程序运行时更改调试级别,但只有在重新启动程序时才会更改级别。

我尝试在AssemblyInfo中使用[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]而不是在main中进行配置,遇到同样的问题,不会看到更改。
我很感激任何见解 塔尔

1 个答案:

答案 0 :(得分:1)

您必须从logmanager获取记录器:

class Program
{
  static void Main(string[] args)
  {
    XmlConfigurator.ConfigureAndWatch(new FileInfo(@"log4net.config"));

    do
    {
        ILog log = LogManager.GetLogger(typeof(Program));
        log.Debug("Hello World!");
        log.Info("I'm a simple log4net tutorial.");
        log.Warn("... better be careful ...");
        log.Error("ruh-roh: an error occurred");
        log.Fatal("OMG we're dooooooomed!");
        Thread.Sleep(1000);
    } while (true);
  }

获得记录器后,它将使用新设置。