.NET Framework 때는 NLog의 설정을 소스 코드에서 하거나 NLog.config, app.config 파일을 사용했습니다. .NET core부터는 프로젝트 설정 파일로 app.config 파일을 사용하지 않고 appsettings.json 파일을 사용하는데 NLog에 적용하려니 조금 불편합니다. 이번 포스팅은 appsettings.json파일로 NLog 설정을 하는 방법입니다.
✅ .NET 7 에서 NLog 사용하기
app.config -> appsettings.json으로 바뀐 부분도 있지만
nuget에서 NLog를 찾아보면 NLog.Config 패키지가 더 이상 지원되지 않는 패키지라고 나옵니다.
파일에서 설정하는 방식을 사용해야 배포 후 Log 설정 변경 등이 수월하기 때문에 되도록이면 NLog.config 또는 App.config 파일을 사용합니다.
그런데 NLog.Config 패키지 지원이 종료되면 NLog 패키지에 통합된다는 것인지 NLog.config 파일을 지원하지 않는 건지 다른 패키지를 사용하면 되는지 알 수가 없습니다.
그렇다고 github에서 업데이트 내역을 다 찾기도 귀찮습니다.
그래서 appsettings.json을 사용하여 NLog의 설정에 적용하는 방법을 찾아봤습니다.
app.xaml.cs
protected override void OnStartup(StartupEventArgs e)
{
var config = new ConfigurationBuilder()
.SetBasePath(System.IO.Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build();
NLog.Config.LoggingConfiguration nlogConfig = new NLogLoggingConfiguration(config.GetSection("NLog"));
LogManager.Configuration = nlogConfig;
base.OnStartup(e);
}
nuget에서
NLog / NLog.Extensions.Logging 패키지를 설치합니다.
- 추가 (23.11.07)
Microsoft.Extensions.Configuration.Json
Microsoft.Extensions.Configuration.FileExtensions
패키지도 추가되어야 합니다.
app.xaml.cs를 수정합니다.
OnStartup을 오버라이딩해서 위 코드를 추가합니다.
위 코드는 json으로 된 NLog 설정 파일 (appsettings.json)을 읽어서 NLog Configuration 형식으로 변경하여 LogManager에서 넘겨줍니다.
private static Logger logger = LogManager.GetCurrentClassLogger();
로그를 사용해야 할 class에서 위 전역 변수를 선언합니다.
LogManager는 Singleton 형태로 Logger 객체를 제공하는 것 같습니다.
아래는 NLog 설정을 json format으로 표현한 예시입니다.
NLog 설정파일 (json 포맷)
{
"NLog": {
"extensions": [
{
"assembly": "NLog.Extensions.Logging"
}
],
"internalLogFile": "${basedir}\\logs\\internal-nlog.txt",
"internalLogLevel": "Info",
"rules": [
{
"logger": "*",
"minLevel": "Trace",
"writeTo": "allfile"
},
{
"final": "true",
"logger": "Microsoft.*",
"maxLevel": "Info"
},
{
"logger": "*",
"minLevel": "Trace",
"writeTo": "ownFile-web"
}
],
"targets": {
"allfile": {
"fileName": "${basedir}\\logs\\nlog-all-${shortdate}.log",
"layout": "${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}",
"type": "File"
},
"ownFile-web": {
"fileName": "${basedir}\\logs\\nlog-own-${shortdate}.log",
"layout": "${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}",
"type": "File"
}
}
}
}
최근에 .NET 버전이 빠르게 변경되면서 주요 라이브러리들도 많은 변화가 있는 것 같습니다.
NLog는 많이 사용하는 라이브러리인 만큼 다음에 좀 더 포스팅을 해보겠습니다.
✅ .NET 7 에서 NLog 사용하기 - 끝