[ASP.NET] ASP.Net core 6에서 NLog 사용하기

NuGet packge manager에서 NLog.Web.AspNetCore 패키지를 검색해서 설치해줍니다.

검색이 귀찮으면 프로젝트 파일에 직접 써넣습니다.

<PackageReference Include="NLog.Web.AspNetCore" Version="5.2.1" />

Program.cs 파일에 아래 코드를 추가합니다.

using NLog.Web;

...

// NLog
builder.Logging.ClearProviders();
builder.Logging.SetMinimumLevel(LogLevel.Trace);
builder.Host.UseNLog();

...

var app = builder.Build();

아래와같이 NLog.config 파일을 작성합니다.

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Info"
      internalLogFile="c:\temp\internal-nlog-AspNetCore.txt">

	<variable name="logFilePath"  value="./Logs/MyApp.${shortdate}.log" />
	
	<extensions>
		<add assembly="NLog.Web.AspNetCore"/>
	</extensions>

	<targets>
		
		<target xsi:type="File"
				name="logfile"
				fileName="${logFilePath}"
				layout="${longdate} - LEVEL=${level:upperCase=true}: ${message}"
				keepFileOpen="true"
				encoding="utf-8"
				archiveAboveSize="10000000"
				archiveNumbering="DateAndSequence"
				archiveDateFormat="yyyy-MM-dd" />

		<target xsi:type="Console" 
				name="console" 
				layout="${longdate} - LEVEL=${level:upperCase=true}: ${message}" />
		
	</targets>

	<!-- rules to map from logger name to target -->
	<rules>
		<logger name="*" minlevel="Debug" writeTo="logfile" />
		<logger name="*" minlevel="Debug" writeTo="console" />
	</rules>
	
</nlog>

이제 ILogger 인터페이스로 쓰여진 모든 log 메세지들도 NLog로 redirect되므로 NLog의 logging 함수들을 사용해도 되고 ILogger 인터페이스의 함수들을 사용해도 됩니다.

 

public ILogger Logger { get; }
public NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    Logger.LogInformation("Log message from ILogger");
    logger.Info("Log message from NLog");
}