상세 컨텐츠

본문 제목

[.NET] NLog 사용

.NET

by 코딩하는 박줄기 2022. 6. 2. 22:00

본문

728x90
반응형

NLog는 다양한 .NET 플랫폼을 위한 유연한 무료 로깅 플랫폼입니다. NLog를 사용하면 데이터베이스, 파일, 콘솔 등 여러 대상에 쉽게 로깅을 할 수 있습니다.

 

이번엔 NLog 로그 라이브러리를 사용하여 파일을 타겟으로 로그 생성을 해보겠습니다.

 * 대상 프레임워크 : .NET Framework 

NLog 설치

솔루션 탐색기 -> 프로젝트 -> 우 클릭 > NuGet 패키지 관리(N)-> NLog 검색 -> NLog, NLog.Config 설치

 

NLog 환경설정

NLog는 시작 시 아래 설명된 대로 다양한 파일에서 환경설정을 검색합니다. 발견된 첫 번째 nlog 환경설정을 로드하며 첫 번째 nlog 환경설정이 발견되면 검색이 종료됩니다. 환경설정을 찾을 수 없는 경우 NLog는 로깅을 수행하지 않습니다.

 

A. 독립 실행형 *.exe 응용 프로그램의 경우 파일은 다음과 같이 검색됩니다.

  • 표준 응용 프로그램 환경설정 파일(일반적으로 applicationname.exe.config)
  • 애플리케이션 디렉토리의 applicationname.exe.nlog
  • 애플리케이션 디렉토리의 NLog.config( 이름 구분, docker dotnet core 사용 )
  • NLog.dll이 있는 디렉토리의 NLog.dll.nlog(NLog가 GAC에 설치되지 않은 경우에만)

B. ASP.NET 응용 프로그램의 경우 파일은 다음과 같이 검색됩니다.

  • 표준 웹 응용 프로그램 파일 web.config
  • web.config와 동일한 디렉토리에 있는 web.nlog
  • 애플리케이션 디렉토리의 NLog.config
  • NLog.dll이 있는 디렉토리의 NLog.dll.nlog(NLog가 GAC에 설치되지 않은 경우에만)

우리는 Nuget 패키지 관리로 설치한 애플리케이션 디렉토리의 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"
      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>

   A. Variable

변수를 사용하면 반복되는 텍스트를 줄여 구성을 단순화할 수 있습니다. 변수는 일반적으로 사용되는(또는 길고 복잡한) NLog 레이아웃에 사람 이름을 지정하는 데 사용할 수 있습니다. 이렇게 하면 NLog 구성을 더 쉽게 구성하고 구성할 수 있습니다.

   B. Targets

로그 대상/출력을 정의합니다. name, xsi:type 외에도 target은 일반적으로 진단 추적이 작성되는 방식에 영향을 미치는 다른 매개변수를 허용합니다. 각 대상에는 서로 다른 매개변수 집합이 있으며 예를 들어, 파일 대상 fileName은 출력 파일 이름을 정의 하는 매개변수를 허용 하고 콘솔 대상 에는 error진단 추적이 프로세스의 표준 출력(stdout) 대신 표준 오류(stderr)에 기록되는지 여부를 결정하는 매개변수가 있습니다.

   C. Rules

Logger 개체 및 로그 수준 과 해당 출력 대상을 제어 합니다. 일반적인 구성은 해당 수준 이상을 포함하는 최소 수준을 지정하는 것입니다. 예를 들어 최소 레벨이 Info인 경우 Info, Warn, Error 및 Fatal은 기록되지만 Debug 및 Trace는 무시됩니다. writeTo는 로그를 출력할 Target의 name을 지정하며 복수의 Target를 지정하려면 쉼표 ( , )로 구분해서 지정한다.

 

File 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>

 

레벨별 로깅

단일 파일 대상을 사용하여 한 번에 여러 파일에 쓸 수 있습니다. 다음 구성을 사용하면 각 로그 수준에 대한 로그 항목이 별도의 파일에 기록되므로 다음을 얻을 수 있습니다.

  • Trace.log
  • Debug.log
  • Info.log
  • Warn.log
  • Error.log
  • Fatal.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}/${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;
        }
    }
}

 

참조

 

728x90
반응형

관련글 더보기

댓글 영역