.NET Serilog 사용법

2023. 4. 26. 09:26Language/C#

Serilog

https://serilog.net/

아래의 예제는 .NET Worker Service 프로젝트에서 사용하는 방법에 대해 소개하도록 하겠습니다.

Serilog란?

파일, 콘솔 등의 다양한 저장소의 로깅을 지원합니다. 그리고 설정하기 쉬운 API로 되어 있으며 다양한 플랫폼에 이식이 가능합니다.

또한 구조화 된 로깅으로 다른 플랫폼에서 읽기 쉽도록 로깅을 생성할 수 있습니다.

사용법

Worker Service를 먼저 생성합니다.

그리고 Nuget Package에서 Serilog.AspNetCore를 설치합니다.

Program.cs에 아래와 같이 코드를 추가합니다.

using Collector.Service;
using Serilog;

IHost host = Host.CreateDefaultBuilder(args)
    .UseSerilog()
    .ConfigureServices((hostContext, services) =>
    {
        Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(hostContext.Configuration).CreateLogger();

    })
    .ConfigureServices(services =>
    {
        services.AddHostedService<Worker>();
    })
    .Build();

await host.RunAsync();

.UseSerilog()로 Serilog를 사용한다고 정의합니다.

ConfigureServices에서 (hostContext, services)를 가져와 Log Config의 정보를 셋팅 합니다.

hostContext.Configuration에는 아래와 같은 json파일을 자동으로 읽어 Configuration 정보를 구성합니다.

우리는 여기서 appsettings.json의 정보를 가져와 사용할 예정이기 때문에 appsettings.json에 아래와 같이 설정합니다.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "Serilog": {
    "MinimumLevel": "Debug",
    "Enrich": [ "WithMachineName" ],
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console",
          "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/log.txt",
          "rollingInterval": "Day",
          "retainedFileCountLimit": 10,
          "outputTenokate": "{Timestamp} [{Level}] - Message: {Message}{NewLine}{Exception}"
        }
      }
    ]
  }
}

Console과 File 모두 Log를 출력하도록 하여 outputTemplate으로 로그의 구조를 정의합니다.

실행시키기 되면 아래와 같이 Console과 파일 모두 생성되어 Log가 기록되는 것을 확인 할 수 있습니다.