NLog는 다양한 .NET 플랫폼을 위한 유연한 무료 로깅 플랫폼입니다. NLog를 사용하면 데이터베이스, 파일, 콘솔 등 여러 대상에 쉽게 로깅을 할 수 있습니다.
이번엔 NLog 로그 라이브러리를 사용하여 파일을 타겟으로 로그 생성을 해보겠습니다.
* 대상 프레임워크 : .NET Framework
솔루션 탐색기 -> 프로젝트 -> 우 클릭 > NuGet 패키지 관리(N)-> NLog 검색 -> NLog, NLog.Config 설치
NLog는 시작 시 아래 설명된 대로 다양한 파일에서 환경설정을 검색합니다. 발견된 첫 번째 nlog 환경설정을 로드하며 첫 번째 nlog 환경설정이 발견되면 검색이 종료됩니다. 환경설정을 찾을 수 없는 경우 NLog는 로깅을 수행하지 않습니다.
A. 독립 실행형 *.exe 응용 프로그램의 경우 파일은 다음과 같이 검색됩니다.
B. ASP.NET 응용 프로그램의 경우 파일은 다음과 같이 검색됩니다.
우리는 Nuget 패키지 관리로 설치한 애플리케이션 디렉토리의 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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<variable name="LogDir" value="C:/{LoggingPath}"/>
<targets>
<target name="fileLog" xsi:type="File"
layout="${longdate} ${uppercase:${level}} ${message}"
fileName="${LogDir}/logs.log"
keepFileOpen="false"
maxArchiveFiles="10" archiveNumbering="Sequence"
archiveAboveSize="1048576"
encoding="utf-8"/>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="fileLog" />
</rules>
</nlog>
변수를 사용하면 반복되는 텍스트를 줄여 구성을 단순화할 수 있습니다. 변수는 일반적으로 사용되는(또는 길고 복잡한) NLog 레이아웃에 사람 이름을 지정하는 데 사용할 수 있습니다. 이렇게 하면 NLog 구성을 더 쉽게 구성하고 구성할 수 있습니다.
로그 대상/출력을 정의합니다. name, xsi:type 외에도 target은 일반적으로 진단 추적이 작성되는 방식에 영향을 미치는 다른 매개변수를 허용합니다. 각 대상에는 서로 다른 매개변수 집합이 있으며 예를 들어, 파일 대상 fileName은 출력 파일 이름을 정의 하는 매개변수를 허용 하고 콘솔 대상 에는 error진단 추적이 프로세스의 표준 출력(stdout) 대신 표준 오류(stderr)에 기록되는지 여부를 결정하는 매개변수가 있습니다.
Logger 개체 및 로그 수준 과 해당 출력 대상을 제어 합니다. 일반적인 구성은 해당 수준 이상을 포함하는 최소 수준을 지정하는 것입니다. 예를 들어 최소 레벨이 Info인 경우 Info, Warn, Error 및 Fatal은 기록되지만 Debug 및 Trace는 무시됩니다. writeTo는 로그를 출력할 Target의 name을 지정하며 복수의 Target를 지정하려면 쉼표 ( , )로 구분해서 지정한다.
가장 간단한 로깅은 단일 로그 파일을 생성하는 것입니다. 이를 위해서는 NLog.config 파일에 다음 코드를 넣어야 합니다. 로그는 로그 디렉토리의 logs.log에 기록됩니다.
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="file" xsi:type="File"
layout="${longdate} ${logger} ${message}${exception:format=ToString}"
fileName="${basedir}/logs/logs.log"
keepFileOpen="false"
encoding="utf-8" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
단일 파일 대상을 사용하여 한 번에 여러 파일에 쓸 수 있습니다. 다음 구성을 사용하면 각 로그 수준에 대한 로그 항목이 별도의 파일에 기록되므로 다음을 얻을 수 있습니다.
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="file" xsi:type="File"
layout="${longdate} ${logger} ${message}${exception:format=ToString}"
fileName="${basedir}/${level}.log"
keepFileOpen="false"
encoding="utf-8"/>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
아래는 일자별 파일로그 아카이빙을 설정하는 예시입니다.fileName="${basedir}/AppLog.${shortdate}.log"를 사용하여 활성화합니다. 이것은 ${date}의 layout-renderer-logic(날짜 변경 시 변경)으로 인해 동적으로 롤/아카이브됨을 의미합니다.
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="file" xsi:type="File"
layout="${longdate} ${logger} ${message}${exception:format=ToString}"
fileName="${basedir}/logs/logs.${shortdate}.log"
maxArchiveFiles="10"
archiveAboveSize="10240"
keepFileOpen="false"
encoding="utf-8"/>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
환경설정이 끝났으면, 프로그램 안에서 로그를 출력하는 방법은 매우 간단하다.
로그를 기록할 클래스에 멤버변수로 로거 인스턴스를 선언하고, 원하는 위치에서 로그를 출력하면 된다.
public class Utils
{
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
public enum LogType
{
Info,
Error,
Debug
}
public static void LogWrite(string msg, LogType logtype)
{
Console.WriteLine(msg);
switch (logtype)
{
case LogType.Info:
_logger.Info(msg);
break;
case LogType.Error:
_logger.Error(msg);
break;
case LogType.Debug:
_logger.Debug(msg);
break;
default:
break;
}
}
}
[.NET] SQL Server SqlConnection 생성 (0) | 2022.09.16 |
---|---|
[.NET] System.Data.SqlClient 참조하기 (0) | 2022.09.14 |
[.NET] Dapper value return To List<Dictionary<string, string>> (0) | 2022.02.14 |
[.NET] DateTime.Compare, 두 날짜를 비교해 빠른지, 같은지, 늦은지 나타냄 (0) | 2021.08.29 |
[.NET] TimeZoneInfo.ConvertTime, 표준 시간대 간 시간 변환 (0) | 2021.07.25 |
댓글 영역