반응형

안녕하세요. 이 카테고리의 지난 글에서 Serilog를 설명드렸는데요.

(이전 글 링크 : https://pichen.tistory.com/48)

 

[c# - dotnet nuget] serilog

블로그에는 글을 너무 안쓴 모양이다... 아주 초반부터 사용하던 이런 것조차 없어서 작성한다. Serilog는 로그를 아주 손쉽게 콘솔 또는 파일로 작성가능하도록 하는 너겟? 누겟? 패키지이다. 참

pichen.tistory.com

 

해당 내용은 Console app, Winform, Wpf 등에서 사용할 수 있는 방법이었구요.

 

web을 할때는 로그를 어떻게 남기냐? -> asp.net core 버전인 Serilog.AspNetCore가 있습니다.

 

 

여기서는 asp.net core mvc 혹은 wep api 프로젝트에서의 사용법을 설명드리겠습니다.

 

 

먼저 visual studio 내 도구 탭에 nuget 패키지 관리자를 통해서 다음과 같이 검색하면

 

Serilog.AspNetCore가 있습니다. 사용하시는 버전에 맞게 설치하시기 바랍니다.

 

다만 이번 예제는 .net7.0버전을 사용했다는 점을 알려드립니다.

 

program.cs에서 

using Serilog;를 적어주시고

var builder = WebApplication.CreateBuilder(args);의 아래에 다음과 같이 입력하시면 됩니다.

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(builder.Configuration)
    .CreateLogger();

builder.Host.UseSerilog();

var configuration = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .Build();

이전 글의 세팅과는 사뭇 다르죠,

 

이전 글의 방법대로도 asp.net core에서 사용할 수도 있으나

 

 

asp.net core에서는 appsettings.json파일에서 설정정보를 받아오기 때문에 그걸 가능하게 하기 위한 방법입니다.

이전 글의 세팅도 사용가능하나 추천하지 않기 때문에 따로 적지는 않겠습니다.

 

만일 개발자버전에서는 다르게 지정하고 싶다면 IsDevelopment() 블록 내에 다른 .json 파일을 적어주시면 됩니다.

여기서는, 개발버전의 디폴트 .json파일인 appsettings.Development.json을 이용하도록 적었습니다.

 

if (app.Environment.IsDevelopment())
{
	// 여기 부분
	  var configuration = new ConfigurationBuilder()
              .AddJsonFile("appsettings.Development.json", optional: false, reloadOnChange: true)
              .Build();

}

이렇게 입력한 후 로그를 남길 컨트롤러로 돌아갑니다.

 

이후 부터는 사실 이미 설치되어있는 ILogger를 이용하면 되는데요. 그래도 혹시 처음 접하시는분들을 위해 방법을 남깁니다.

[Route("[controller]")]
public class HomeController : ControllerBase
{
    private readonly IConfiguration _configuration;
    private readonly ILogger<HomeController> _logger;

    public HomeController(ILogger<HomeController> logger, IConfiguration configuration)
    {
        _logger = logger;
        _configuration = configuration;
    }
}

이와 같이 private readonly + 생성자의 변수를 입력하면 ILogger에 대한 의존성 주입이 완료되며,

ILogger로 작성한 로그가 Serilog 라이브러리에서 파일이나 콘솔에 남길 수 있게 됩니다.

 

각각 메소드에

_logger.LogVerbose();

_logger.LogDebug();

_logger.LogInformation();

_logger.LogWarning();

_logger.LogFatal();

_logger.LogError();

 

등과 같이 사용하실 수 있습니다. 괄호 내에는 string 변수를 입력하면 되며, 서식 문자열 등은 앞에 Serilog 게시글을 확인하시기 바랍니다.

 

마지막으로 appsettings.json에 어떻게 입력하면 되는지 설명드리겠습니다.

 

"Serilog": {
  "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
  "MinimumLevel": {
    "Default": "Information",
    "Override": {
      "Microsoft": "Information",
      "System": "Error"
    }
  },
  "WriteTo": [
    {
      "Name": "Console"
    },
    {
      "Name": "File",
      "Args": {
        "path": "로그파일을 저장할 경로이며, .txt 바로앞에년월일이 찍힙니다. log-.txt",
        "rollingInterval": "Day",
        "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
      }
    }
  ]
}

앞 글의 Serilog를 입력할때 넣었던 설정정보가 모두 들어있죠.

Using에는 Serilog.AspNetCore를 설치하면 이미 담겨있는 라이브러리들입니다.

 

using

   "Serilog.Sinks.Console" - console창에도 찍으려면 기입

   "Serilog.Sinks.File" - file을 남기려면 기입

MinimumLevel - 최저 로그레벨, 최저 로그레벨 자체에 대한 설명은 이전 Serilog 설명글에 남겨두었기 때문에 생략합니다. (이전 글을 보고 싶으시다면 글의 최상단으로 이동하시면 링크가 있습니다.)

 

위에 using은 라이브러리 참조를 나타냈다면, 실제로 쓰기역할을 하는 부분이

WriteTo 입니다. 

"Name": "Console" 기입시 콘솔에 찍히게 되고

"Name": "File"  기입시 로그파일이 남게 됩니다.

 

위에 using 부분이랑 console끼리, File끼리 짝이라고 생각하시면 됩니다.

 

WriteTo 내 Args 에는 파일에 대한 설정정보를 기입할 수 있으며

"path"에는 로그파일이 작성될 경로와 파일명을 입력하는데, 확장자 바로 앞에는 날짜가 자동으로 붙습니다.

가령 "log-.txt"로 입력하게되면 프로젝트 경로 내 log-20231027.txt 파일로 로그파일이 생성됩니다.

그러나 서버에 사이트를 올릴때에는 절대경로로 적어두는 것이 좋다고 생각하고, 이 형식을 감안해서 파일이름도 별도로 정해두어 알아보기 쉽게하는 것이 좋다고 생각합니다.

"rollingInterval" 은 파일이 새로 생성되는 주기이고 "Day"로 적으면 하루가 지나면 새로운 로그파일이 생성됩니다.

"outputTemplate"은 로그가 찍히는 line의 형식을 나타냅니다. 기본 세팅을 변경하고싶다면 여기서 변경하면 됩니다.

 

 

이상으로 Serilog.AspNetCore에 대한 기본적인 설명을 마칩니다.

사용하면서 궁금한 점이나 추가했으면 좋겠는 점은 댓글로 남겨주시면 업데이트하도록 하겠습니다.

 

감사합니다.

 

반응형

+ Recent posts