ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Log4Net 동적설정
    C# 2020. 2. 19. 17:27

    정적 설정은 타 블로그에도 내용이 많아 상관없지만

    동적 설정의 경우 파일 한 개에 대한 예제들만 존재하고

    같은 형태의 로그 파일을 여러 개 선언하고 싶은 경우에 대해 나와있지 않아 글을 남겨놓습니다.

     

     

    public ILog SetCheckFile()
    {
        String FilePath;
        Hierarchy hierarchy = new Hierarchy();
        RollingFileAppender rollingAppender = new RollingFileAppender();
        PatternLayout layout = new PatternLayout();
    
        ILog log;
    
        FilePath = "D:\\CCU\\logTest\\";
    
        hierarchy.Configured = true;
    
        rollingAppender.Name = "CheckFile";
        rollingAppender.ImmediateFlush = true;
        rollingAppender.File = FilePath;
        rollingAppender.Encoding = Encoding.UTF8;
        rollingAppender.AppendToFile = true;
    
        rollingAppender.DatePattern = "yyyyMMdd'_Check.log'";
        rollingAppender.RollingStyle = RollingFileAppender.RollingMode.Composite;
        rollingAppender.LockingModel = new RollingFileAppender.MinimalLock();
        rollingAppender.StaticLogFileName = false;
        rollingAppender.MaxSizeRollBackups = 100;
        rollingAppender.MaximumFileSize = "5MB";
    
        layout = new log4net.Layout.PatternLayout("%-5p - %m%n");
        rollingAppender.Layout = layout;
        rollingAppender.ActivateOptions();
    
        log4net.Repository.ILoggerRepository repository = LogManager.CreateRepository("CheckFileRepo");
        BasicConfigurator.Configure(repository, rollingAppender);
        log = LogManager.GetLogger("CheckFileRepo", "CheckFileLogger");
    
        return log;
    }
    

     

    대부분의 설정들은 정적 설정과 동일하나 

    repository와 BasicConfiguration을 각 파일마다 새로 설정해줘야 합니다.

     

     

     

    만약 정적 설정과 동일하게 아래와 같은 코드로 설정을 구성한다면

    단일 파일의 경우 문제가 없지만, 해당 log 변수를 통해 여러 log 변수들을 개별적으로 선언하여

    여러 파일에 log를 쌓고자 한다면 문제가 발생합니다.

     

    public ILog SetCommon()
    {
        String FilePath;
        Hierarchy hierarchy = new Hierarchy();
        RollingFileAppender rollingAppender = new RollingFileAppender();
        PatternLayout layout = new PatternLayout();
    
        ILog log;
    
        FilePath = "D:\\CCU\\logTest\\";
    
        hierarchy = (Hierarchy)LogManager.GetRepository();
        
        
        hierarchy.Configured = true;
    
        rollingAppender.Name = "Common";
        rollingAppender.File = FilePath;
        rollingAppender.Encoding = Encoding.UTF8;
        rollingAppender.AppendToFile = false;
    
        rollingAppender.DatePattern = "yyyyMMdd'_Tool.log'";
        rollingAppender.RollingStyle = RollingFileAppender.RollingMode.Composite;
        rollingAppender.LockingModel = new log4net.Appender.RollingFileAppender.MinimalLock();
        rollingAppender.StaticLogFileName = false;
        rollingAppender.MaxSizeRollBackups = 100;
        rollingAppender.MaximumFileSize = "5MB";
    
        layout = new log4net.Layout.PatternLayout("%d %-5p - %m%n");
        layout.ActivateOptions();
    
        rollingAppender.Layout = layout;
    
        hierarchy.Root.AddAppender(rollingAppender);
        rollingAppender.ActivateOptions();
        hierarchy.Root.Level = log4net.Core.Level.All;
    
        log = LogManager.GetLogger("Common");
    
        return log;
    }
    

     

    파일 옵션을 설정하는 구간까지는 다른 점이 없으나

     

    하단 부분의 hierarchy와 rollingAppender 관련 설정이 조금 다른 것을 확인할 수 있습니다.

     

     

    따라서 맨 위의 코드처럼 원하는 폼을 지정하는 함수를 여러개 생성하여

     

    각각의 log 객체를 반환하여 사용하면 동시에 여러 파일을 만들 수 있습니다.

     

Designed by Tistory.