2017-12-13 6 views
3

私はlog4netパッケージ用の少しラッパーを作成する必要があります。xmlファイルなしでlog4netを初期化する

xml設定ファイルを使用せずにロガーを初期化する必要もあります(このプロジェクトには設定ファイルがたくさんあります)。

私はMyLoggerクラスを書いていますが、プログラムを実行するとコンソールに何も表示されません。

最小限の例を得るためにコードを縮小しようとしました(設定ファイルの読み込みや他のものを削除しました)。

まず、Loggerインスタンスを作成し、レベルをTraceに設定してから、AnsiColorTerminalAppenderを追加します。明らかに何かが間違っているか行方不明ですが、私は何を理解できません。

ログメッセージを印刷するためにクラスを修正するにはどうすればよいですか?

using log4net; 

namespace MyProgram 
{ 
    static class MyLogger 
    { 
    static ILog logger = null; 

    public static void SetConfiguration() 
    { 
     logger = LogManager.GetLogger(typeof(MyLogger)); 
     var l = (log4net.Repository.Hierarchy.Logger)logger.Logger; 
     l.Level = log4net.Core.Level.Trace; 
     AddConsoleAppender(); 
    } 

    public static void Debug(string message) 
    { 
     logger.Debug(message); 
    } 

    public static void Info(string message) 
    { 
     logger.Info(message); 
    } 

    // Others here 

    static private void AddConsoleAppender() 
    { 
     var appender = new log4net.Appender.AnsiColorTerminalAppender 
     { 
     Threshold = log4net.Core.Level.Info 
     }; 
     var l = (log4net.Repository.Hierarchy.Logger)logger.Logger; 
     log4net.Layout.PatternLayout layout = new log4net.Layout.PatternLayout 
     { 
     ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n" 
     }; 
     layout.ActivateOptions(); 
     appender.Name = "Console"; 
     appender.Layout = layout; 
     appender.ActivateOptions(); 
     l.AddAppender(appender); 
    } 
    } 

    class Program 
    { 
    static void Main(string[] args) 
    { 
     MyLogger.SetConfiguration(); 
     MyLogger.Info("Logger configuration loaded"); 
    } 
    } 
} 

答えて

2

あなたはBasicConfiguratorを使用せずにアペンダを追加する場合は、trueにロガーリポジトリのConfiguredプロパティを手動で設定する必要があります。 AddConsoleAppender()メソッドの末尾に次の行を追加してください:

static private void AddConsoleAppender() 
{ 
    // ... 
    var l = (log4net.Repository.Hierarchy.Logger)logger.Logger; 
    // ... 
    l.Repository.Configured = true; 
} 
関連する問題