백구의 코딩찌개
  • [WPF] WPF Serilog 사용해서 Log 세팅하기
    2024년 02월 01일 16시 53분 35초에 업로드 된 글입니다.
    작성자: 코딩백구
    반응형

    Serilog 패키지를 사용하여 log 를 출력하고 파일에 저장하는 기능을 적용해보도록 하겠습니다.

    우선, Nuget Package 에서 아래 패키지를 설치해줍니다.

    • Serilog
    • Serilog.Sinks.Console
    • Serilog.Sinks.File

    저는 json 파일로 config 설정을 해줄 것이므로 아래 패키지를 추가로 설치했습니다.

    • Serilog.Settings.Configuration 
    • Microsoft.Extensions.Configuration 
    • Microsoft.Extensions.Configuration.FileExtensions 
    • Microsoft.Extensions.Configuration.Json

    이렇게 설치하고 나면 기본적인 Setting 은 끝났습니다.

     

    이제 코드 작성으로 넘어가보도록 하겠습니다.

    1. appsettings.json 파일 생성

    {
      "Log": {
        "Serilog": {
          "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
          "MinimumLevel": "Debug",
          "WriteTo": [
            { "Name": "Console" },
            {
              "Name": "File",
              "Args": {
                "path": "Logs/log.txt",
                "rollingInterval": "Minute",
                "retainedFileCountLimit": 7,
                "fileSizeLimitBytes": 10485760
              }
            }
          ],
          "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
          "Destructure": [
    
            {
              "Name": "ToMaximumDepth",
              "Args": { "maximumDestructuringDepth": 4 }
            },
            {
              "Name": "ToMaximumStringLength",
              "Args": { "maximumStringLength": 100 }
            },
            {
              "Name": "ToMaximumCollectionCount",
              "Args": { "maximumCollectionCount": 10 }
            }
          ],
          "Properties": {
            "Application": "Rl_AMS_UI"
          }
        }
      }
    }

    위 내용을 보시면 아시겠지만, json 파일에서 Log Setting 을 해줄 수 있습니다.

    2. Program.cs 작성

    using Microsoft.Extensions.Configuration;
    using Serilog;
    
    namespace SerilogTest
    {
      internal class Program
      {
        static async Task Main(string[] args)
        {
          Console.WriteLine("Hello, World!");
    
          var configuration = new ConfigurationBuilder()
           .SetBasePath(Directory.GetCurrentDirectory())
           .AddJsonFile("appsettings.json")
           .Build();
    
    
          Log.Logger = new LoggerConfiguration()
             .ReadFrom.Configuration(configuration.GetSection("Log"))
             .CreateLogger();
    
          try
          {
            Log.Error("This is Error!!!!!");
            Log.Information("Hello, Serilog world!");
            throw new Exception("Test Exception");
          }
          catch (Exception ex)
          {
            Log.Error(ex, "Something went wrong");
          }
          finally
          {
            await Log.CloseAndFlushAsync();
          }
    
        }
      }
    }

    configuration 에서 appsettings.json 의 내용을 읽어오고,  GetSection 메서드로 "Log" 부분만 따로 가져옵니다.

    그리고 Log.Information , Log.Error, Log.Debug 등의 함수를 사용하여 로그를 출력할 수 있습니다.

     

    이제 작성한 코드를 실행해보면,

     

    실행 결과

    1. 로그 출력 화면

     

     

    2. Log File 저장 확인

     

     

    3. Log File 내용 확인

     

    기능이 정상적으로 작동하는것을 확인할 수 있습니다.

    반응형

    'WPF' 카테고리의 다른 글

    [WPF] Serilog appsettings.json 옵션 값 설명  (0) 2024.02.02
    댓글