Home 2. Serilog
Post
Cancel

2. Serilog

뭘로할까?

  • 일단 많이 보이는게 NLog, Serilog 라서 이 둘 중 하나 고르기로 함.

Serilog

  • 이걸 먼저 쓰고 있어서 내 목적에 맞게 쓸 수 있나 알아보기로 함.
  • 쓰는건 간단했음.
    1
    2
    3
    4
    
    Log.Logger = new LoggerConfiguration()
                    .WriteTo.File(@"myapp\log_3.txt")
                    .CreateLogger();
    Log.Logger.Information("log3");
    

    근데 Log.Logger이 static면 다르게 쓸 수 없을것같음.
    LoggerConfiguration을 mapping시켜 불러다 쓰는 것도 모르겠음
    한번 설정 하고 전역으로 저 config대로 쓸것같음.

  • 그러다 찾은게 아래[^1] 인데 보면
    1
    2
    3
    4
    5
    6
    7
    
    using (var performanceCounters = new LoggerConfiguration()
                                        .WriteTo.File(@"myapp\log.txt")
                                        .CreateLogger())
    {
        performanceCounters.Information("Performance is really good today ;-)");
        // Your app runs, then disposal of `performanceCounters` flushes any buffers
    }
    

    이거 좀 더 살붙이면 될것같았는데
    근데 쓸때 마다 새로 만드는것도 그렇고
    무튼 좀 찜찜한데 더 알아보고 이방법이 상관없으면 쓰기로 하자.

  • 둘다 비교하다 보니까 Log.Logger은 static인데 performanceCounters쓰는 아래 방식은 변수처리 되어있어 보니까
    Log.Logger 는 Serilog.Log이고 var performanceCounters는 형식이 Serilog.Core.Logger임 그래서
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Serilog.Core.Logger logger_1 = new LoggerConfiguration()
                                      .WriteTo.File(@"myapp\log_4.txt")
                                      .CreateLogger();
    logger_1.Information("log4_1");
    
    Serilog.Core.Logger logger_2 = new LoggerConfiguration()
                                      .WriteTo.File(@"myapp\log_5.txt")
                                      .CreateLogger();
    logger_2.Information("log5_2");
    

    이렇게 하면 완성.
    인줄 알았는데 logger_1과 logger_2는 같은 파일에 접근을 못하는것같음 같은 파일에 쓰면 뒤꺼가 씹힘
    logger_1 target file에 같이 쓰는게 아니라 logger_2가 아무 동작도 안하는듯해보임.
    file open상태로 잡고있나봄..

  • 또 하나 더 찾은것. map를 사용하는 방법.
    1
    2
    3
    4
    5
    
    Log.Logger = new LoggerConfiguration()
                    .WriteTo.Map("Name", "Other", (name, wt) => wt.File($"./Logs/{name}_.txt", rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}]\t {Message}{NewLine}"))
                    .MinimumLevel.Verbose()
                    .CreateLogger();
    Log.Information("Hello, {Name}!", "Bob");
    

    역시나 간단하다. Serilog는 전체적으로 간단해보여서 어지간하면 이걸로 쓰고싶었다.
    무튼 이것도 안된다.
    각각 파일별로 나누는건 가능한데 실제 로그를 찍을 때 내용에 꼭 {name} 이부분이 들어가야 {name}.log파일이 생성되고 그 안에 내용이 써진다.
    문제는 내용에도 {name}가 들어가게 된다.
    따라서 로그 내용이 yyyy-mm-dd HH:mm:ss.fff {name} “contents” 이런식임 {name}를 뺄 수 없었음. 빼면 default인 Other(위의경우)로 써짐.

    결론

  • Serilog 사용 불가.
  • stackoverflow 에 물어봤는데 “just use separate ILogger” 딱 이것만 친절히 답변달림. ㅆㅂ
  • 그래서 이곳저곳 찾던 중 발견한게 NLog.

참고

This post is licensed under CC BY 4.0 by the author.

1. Init

3. NLog

Comments powered by Disqus.