1

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

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 配置在文件更改时重新加载。我尝试在程序运行时更改调试级别,但只有在我重新启动程序时才会更改级别。

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

4

1 回答 1

1

您必须从您的日志管理器获取您的记录器:

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);
  }

当您获得记录器时,它将使用新设置。

于 2013-09-17T09:22:28.147 回答