C#

Serilog 로그 설정

삽사 2024. 5. 19. 02:40

누겟 패키지 설치 

 

Program.cs 파일 설정

using Serilog;
using Serilog.Events;
using Serilog.Formatting.Json;

var builder = Host.CreateApplicationBuilder(args);

//로그 설정
var logger = new LoggerConfiguration()
     .WriteTo.Console() //콘솔창에 기록 
     //경고 단계부터 error 파일에 기록
     .WriteTo.File(new JsonFormatter(), "../logs/log-error.json", restrictedToMinimumLevel:LogEventLevel.Warning) 
     //info 단계 로그부터 매일 날짜 이름으로 된 파일에 기록
     .WriteTo.File(new JsonFormatter(), "../logs/log-.json", rollingInterval: RollingInterval.Day) 
     .MinimumLevel.Information()
     .CreateLogger();

builder.Logging.ClearProviders();
builder.Logging.AddSerilog(logger);

var host = builder.Build();
host.Run();

 

실제로 로그 사용하는 법 

private readonly ILogger<ClassName> _logger;

public ClassName(ILogger<ClassName> logger){
	_logger = logger 
}

public Method(){
	_logger.LogInformation("logger is working..");
}

 

Program.cs 파일 기준으로 상위 폴더(../logs)에 저장했으므로 솔루션 루트 경로에 logs 폴더가 생긴다. 

열어보면 이런식으로 기록이 되어있다. 

 

 

번외: 설정 외부로 빼는 법 

 

Extensions 폴더를 만들고 HostApplicationBuilderExtensions 라는 클래스를 만든다

public static class HostApplicationBuilderExtensions
{
    public static void SerilogSettings(this HostApplicationBuilder builder)
    {
        //로그 설정
        var logger = new LoggerConfiguration()
            .WriteTo.Console()
            .WriteTo.File(new JsonFormatter(), "../logs/log-error.json", restrictedToMinimumLevel:LogEventLevel.Warning)
            .WriteTo.File(new JsonFormatter(), "../logs/log-.json", rollingInterval: RollingInterval.Day)
            .MinimumLevel.Information()
            .CreateLogger();

        builder.Logging.ClearProviders();
        builder.Logging.AddSerilog(logger);
    }
}

 

Program.cs 파일을 수정한다.

using Serilog;
using Serilog.Events;
using Serilog.Formatting.Json;

var builder = Host.CreateApplicationBuilder(args);

builder.SerilogSettings(); //추가

var host = builder.Build();
host.Run();