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>

私が理解している限り (間違っている場合は訂正してください)、watch 部分は、ファイルの変更時に XML 構成が再ロードされることを意味します。プログラムの実行中にデバッグ レベルを変更しようとしましたが、プログラムを再起動した場合にのみレベルが変更されます。

同じ問題で、メインで構成する代わりに AssemblyInfo で使用しようとしまし[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]たが、変更は監視されません。
洞察をいただければ幸いです。
タル

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 に答える