전 포스팅에서 .NET기본 로거를 사용하는 방법을 알아봤습니다.
로거를 파일로 출력하려면 외부 라이브러리를 사용해야 합니다.
이 포스팅에서는 'NReco.Logging.File'를 이용하여 로그를 파일로 출력합니다.
.NET에서 로그를 파일로 내보내는 기능은 외부 라이브러리를 쓰라고 되어 있습니다.
(더 이상 기본기능으로 제공하지 않음)
이 포스팅에서는 'NReco.Logging.File'를 사용합니다.
파일 출력을 위해 파일명을 지정하고 로거빌더(LoggingBuilder)에서 출력 형식을 지정해 줍니다.
서비스에서 'AddLogging'을 이용하여 외부 빌더를 설정해 줍니다.
builder.Services.AddLogging(loggingBuilder
=> loggingBuilder.AddFile("Logs/Log_{0:yyyy}-{0:MM}-{0:dd}.log"
, fileLoggerOpts =>
{
//파일 출력 이름
fileLoggerOpts.FormatLogFileName = sNameFormat =>
{
return String.Format(sNameFormat, DateTime.Now);
};
}));
이 코드는 현재 시간으로 파일을 만들어 줍니다.
'ConfigureServices'에서 로깅(Logging)을 추가할 수 있습니다.
public void ConfigureServices(IServiceCollection services)
{
... 중략 ...
//로그 파일 설정
services.AddLogging(loggingBuilder
=> loggingBuilder.AddFile("Logs/Log_{0:yyyy}-{0:MM}-{0:dd}.log"
, fileLoggerOpts =>
{
//파일 출력 이름
fileLoggerOpts.FormatLogFileName = sNameFormat =>
{
return String.Format(sNameFormat, DateTime.Now);
};
}));
... 중략 ...
}
메시지 커스텀에서 부터 시작해서 다양한 설정이 가능합니다.
'FormatLogEntry'를 이용하면 원하는 포맷으로 로그를 만들 수 있습니다.
fileLoggerOpts.FormatLogEntry = (lmMsg) =>
{
return $"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}] {lmMsg.LogLevel} [{lmMsg.LogName}] {lmMsg.Message}";
};
이렇게 출력됩니다.
로그 정보를 가지고 원하는 대로 메시지를 커스텀 할 수 있습니다.
아래 코드는 로그 레벨에 따라 로그에 라벨링은 하는 예제입니다.
fileLoggerOpts.FormatLogEntry = (lmMsg) =>
{
string sLevel = string.Empty;
switch (lmMsg.LogLevel)
{
case LogLevel.Information:
sLevel = "Info";
break;
case LogLevel.Warning:
sLevel = "Warn";
break;
default:
sLevel = lmMsg.LogLevel.ToString();
break;
}
return $"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}] {sLevel} [{lmMsg.LogName}] {lmMsg.Message}";
};
참고 : github - dang-gun/DotNetSamples/LoggingNReco_Aspnet/
MS에서 왜 기본 로그 파일 출력을 더 이상 지원하지 않는지는 모르겠습니다.
복잡한 기능은 몰라도 단순 출력이면 난이도가 높은것도 아닌데 말이죠....