[C#] .NET6 WorkerService Serilog 사용하기
- C#
- 2023. 1. 26. 20:43
개요
- .NET6 WorkerService 프로젝트를 생성 후, Serilog 사용하여 로그 파일을 저장하는 방법에 대해서 정리 진행합니다.
개발환경
- 테스트 개발 환경은 다음과 같습니다.
- .NET6
- Visual Studio 2022
1. WorkerService 프로젝트 생성
2. Serilog 패키지 추가
- 다음으로, Serilog 패키지를 추가해 주어야 합니다.
- Serilog 를 사용하기 위해서는 아래의 패키지들이 필요합니다.
- Serilog.AspNetCore
- Serilog.Exception
- Serilog.Sinks.Console
- Serilog.Sinks.Debug
- Serilog.Sinks.File
- 위 패키지들이 모두 설치가 되어 있어야 합니다.
3. Worker.cs 코드 추가
- 다음으로, WorkerService 를 실행시켜서 로그를 기록해 주어야 합니다.
- 테스트를 하기 위해서, 네이버 사이트의 접속 상태를 5초마다 체크하여 상태의 정보를 로그로 기록하는 코드를 추가해 주었습니다.
namespace WorkerServiceHosting
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private HttpClient client;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
public override Task StartAsync(CancellationToken cancellationToken)
{
client = new HttpClient();
return base.StartAsync(cancellationToken);
}
public override Task StopAsync(CancellationToken cancellationToken)
{
client.Dispose();
return base.StopAsync(cancellationToken);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var result = await client.GetAsync("https://www.naver.com");
if(result.IsSuccessStatusCode)
{
_logger.LogInformation("The website is up. Status code {StatusCode}", result.StatusCode);
}
else
{
_logger.LogError("The website is down. Status code {StatusCode}", result.StatusCode);
}
await Task.Delay(5000, stoppingToken);
}
}
}
}
4. appsettings.json Serilog 설정하기
appsettings.json
에 Serilog 관련 옵션들을 설정해 줍니다.- 보다 자세한 옵션을 확인하려면, Serilog Git 사이트 참고하면 됩니다.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"Serilog": {
"MinimumLevel": "Information",
"Using": [ "Serilog.Exceptions", "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"Enrich": [ "WithExceptionDetails" ],
"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": "C:\\Temp\\workerservice\\log-.json",
"rollingInterval": "Day",
"rollOnFileSizeLimit": true,
"fileSizeLimitBytes": 50000000,
"retainedFileCountLimit": 10000,
"formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
}
}
]
}
}
5. Program.cs
- 다음은, Program.cs 코드 입니다.
- 해당 코드에서 Serilog 관련 코드를 추가해 주었습니다.
using Serilog;
using WorkerServiceHosting;
try
{
IHost host = Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureServices(services =>
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", false, true)
.AddEnvironmentVariables()
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom
.Configuration(configuration)
.CreateLogger();
Log.Information("Starting up the service");
services.AddHostedService<Worker>();
})
.Build();
await host.RunAsync();
}
catch (Exception e)
{
Log.Error(e.Message);
Log.Error(e.StackTrace);
Log.Error(e.Message);
}
finally
{
Log.CloseAndFlush();
}
실행 결과
- F5 키를 눌러서, WorkerService 실행하여 우선 콘솔 화면에서 로그가 잘 찍히는지 확인합니다.
- 확인 결과, 5초마다 로그가 기록 되는 것을 확인할 수 있습니다.
Serilog 파일 확인
- 다음으로, 실제로 로그 파일이 생성되어 내용이 기록 되었는지 확인합니다.
- 저 같은 경우는, 확장자를 .json 으로 하였습니다.
- 확인 결과, 파일 정상적으로 생성 되었고 내용도 정상적으로 기록된 것을 확인할 수 있습니다.
728x90
'C#' 카테고리의 다른 글
[C#] .NET WorkerService Docker Container HEALTHCHECK 방법 (0) | 2023.01.26 |
---|---|
[C#] Console Porject Web API Project 변환하기 (0) | 2023.01.26 |
[C# .NET Core] EFCore PostgreSQL CodeFirst 예제 (0) | 2022.11.29 |
[.NET EFCore] EFCore Postgresql Database First 예시 (0) | 2022.11.26 |
[C# 디자인패턴] Factory Method 패턴 (0) | 2022.11.01 |
이 글을 공유하기