2017-12-13 14 views
3

log4net 패키지에 대한 약간의 래퍼를 만들어야합니다.xml 파일없이 log4net 초기화

xml 구성 파일을 사용하지 않고도 로거를 초기화해야합니다 (요구 사항이므로 이미이 프로젝트에 구성 파일이 많이 있습니다).

나는 MyLogger 클래스를 작성했지만 프로그램을 실행할 때 콘솔에 아무것도 표시되지 않습니다.

최소한의 예를 갖기 위해 코드를 축소하려고했습니다 (설정 파일을 삭제하고 다른 것을 삭제했습니다).

처음에는 로거 인스턴스를 만들고 레벨을 Trace로 설정 한 다음 AnsiColorTerminalAppender을 추가합니다. 분명히 잘못되었거나 누락 된 것이 있지만 무엇을 이해할 수는 없습니다.

로그 메시지를 인쇄하려면 클래스를 어떻게 수정해야합니까? 당신이 BasicConfigurator의 사용하지 않고 펜더를 추가하는 경우

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

, 당신은 수동으로 true로 로거 저장소의 Configured 속성을 설정해야합니다. AddConsoleAppender() 메소드 하단에 다음 줄을 추가하면됩니다.

static private void AddConsoleAppender() 
{ 
    // ... 
    var l = (log4net.Repository.Hierarchy.Logger)logger.Logger; 
    // ... 
    l.Repository.Configured = true; 
}