[.NET Core] ASP.NET Core 3.1 - NLog 설정 및 사용 방법
NLog는 .NET 표준을 포함한 다양한 .NET 플랫폼을 위한 유연한 무료 로깅 플랫폼입니다.
ASP.NET MVC 때 부터 주로 NLog만을 사용해와서, 익숙한 Logging 플랫폼인데요.
.NET Core 를 학습하는 과정에서도 NLog를 사용해서 Logging을 구축하였습니다.
1. Nuget Package 다운로드
NLog 를 Nuget Package 관리자에서 검색하시면, 아래 AspNetCore 용 NLog를 발견하실 수 있습니다.
제가 설치했을때의 최신 버전인 4.9.2 버전을 설치합니다.
2. NLog 공식 GitHub
https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-3
NLog 공식 GitHub는 위 사이트 입니다.
해당 사이트에 접속하시면, 어떻게 구성해야 하는지 자세하게 나와 있습니다.
3. nlog.config 파일 생성
사용방식은 기존과 비슷합니다만, ASP.NET Core 에서는 nlog.config 파일을 이용해서 대부분 설정이 가능합니다.
기본적으로 사용하는 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.txt">
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!-- the targets to write to -->
<targets>
<!-- write logs to file -->
<target xsi:type="File" name="allfile" fileName="c:\temp\nlog-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
<!-- another file log, only own logs. Uses some ASP.NET core renderers -->
<target xsi:type="File" name="ownFile-web" fileName="c:\temp\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}" />
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" />
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxlevel="Info" final="true" /> <!-- BlackHole without writeTo -->
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>
4. 출력 디렉터리로 복사 설정
nlog.config 파일의 출력 디렉터리로 복사 메뉴를 새 버전이면 복사 로 설정해줍니다.
기본 설정 사항인걸로 알고 있어서, 따로 설정하실 필요는 없지만, 확인은 해보세요^^
5. 로깅 설정
.NET Core 3.1의 경우 Program.cs 파일에서 Logging에 대한 사용을 NLog로 설정합니다.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureLogging(logging =>
{
logging.ClearProviders();
}).UseNLog();
webBuilder.UseStartup<Startup>();
});
위와 같이 설정할 경우 각 Controller에서 정의된 logger에 기본적으로 NLog 로 설정 됩니다.
private readonly ILogger<GroupController> _logger;
public GroupController(ILogger<GroupController> logger)
{
_logger = logger;
}
logger를 별도로 정의해서 사용하시려면, 아래와 같이 사용 할 수 있습니다.
var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
try
{
logger.Debug("init main");
CreateHostBuilder(args).Build().Run();
}
catch (Exception exception)
{
//NLog: catch setup errors
logger.Error(exception, "Stopped program because of exception");
throw;
}
finally
{
// Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
NLog.LogManager.Shutdown();
}
줄맞춤 TIP
18.12.2013 11:23:14,834 | INFO | this is an info
18.12.2013 11:23:14,835 | TRACE | this is a trace
18.12.2013 11:23:14,834 | INFO | this is an info
18.12.2013 11:23:14,835 | TRACE | this is a trace
Level 을 로그에 찍을때 위와 같이 개수문제로 인해서 안이쁘게 보여지는데요.
layout="${uppercase:${level}:padding=-5}
padding=-5 와 같이 자리수를 같이 넣으면 5칸으로 보기 좋게 맞춰집니다.
참고하세요
https://stackoverflow.com/questions/20655755/nlog-format-loglevel-with-whitespaces
'.NET' 카테고리의 다른 글
[.NET Core] ASP.NET Core 3.1 - 제네릭클래스 의존성 주입 방법 (0) | 2020.08.05 |
---|---|
[.NET Core] .NET Core 3.1 - Swagger 적용 (0) | 2020.05.19 |
[Core 3.1] CentOS7 - .NET Core SDK 설치하기 (0) | 2020.02.25 |
[Core 3.1] ASP.NET Core ActionFilter를 이용한 Session 체크 (0) | 2020.02.20 |
[.NET Core] ASP.NET Core 3.1 Areas(영역) 추가 방법 (0) | 2020.02.18 |