티스토리 뷰

개발언어/C#

[C#] NLog

kr98gyeongim 2023. 8. 15. 16:21

NLog의 설정

Config 파일로 설정하는 방법과 소스코드로 설정하는 방법에 대해 설명을 하고자 한다.

 

■ NLog.config 설정파일

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

  <targets>
    <target name="logfile" xsi:type="File" fileName="file.txt" />
    <target name="logconsole" xsi:type="Console" />
  </targets>

  <rules>
    <logger name="*" minlevel="Info" writeTo="logconsole" />
    <logger name="*" minlevel="Debug" writeTo="logfile" />
  </rules>
</nlog>

■ 소스코드

var config = new NLog.Config.LoggingConfiguration();

var logfile = new NLog.Targets.FileTarget("logfile") { FileName = "file.txt" };
var logconsole = new NLog.Targets.ConsoleTarget("logconsole");

config.AddRule(LogLevel.Info, LogLevel.Fatal, logconsole);
config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);

NLog.LogManager.Configuration = config;

 

로그 파일 쓰기(Writing log messages)

Nlog를 랩하는 NLog Service 클래스를 생성하고 로그 레벨 "Info" 로그를 출력해보기

using NLog;

namespace NLogService
{
    public static class NLogService
    {
        private static Logger logger = LogManager.GetCurrentClassLogger();

        public static void PrintInfoLog(string str)
        {
            logger.Info(str);
        }
    }
}
namespace NLogService
{
    class Program
    {
        static void Main(string[] args)
        {
            NLogService.PrintInfoLog("Hello World");
            Console.ReadKey();
        }
    }
}

[결과]

콘솔에 아래 로그 메시지가 출력된 것을 확인할 수 있으며, 같은 로그 메시지를 기재한 file.txt로 출력됐다.

2023-08-14 23:19:07.5302|INFO|NLogService.NLogService|Hello World

 

Logger 지정

위의 방법과 같이 NLog.LogManager.GetCurrentClassLogger()를 사용한 경우

호출측 클래스 이름으로 로거를 작성한다.

NLog.LogManager.GetLogger("My Logger")를 호출했을 경우 명시적인 로거의 이름을 지정할 수도 있다.

아래와 같이 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">

  <targets>
    <target name="logfile" xsi:type="File" fileName="file.txt" />
    <target name="logconsole" xsi:type="Console" />
  </targets>

  <rules>
    <logger name="LEVEL_INFO" minlevel="Info" writeTo="logconsole" />
    <logger name="LEVEL_DEBUG" minlevel="Debug" writeTo="logfile" />
  </rules>
</nlog>
namespace NLogService
{
    class Program
    {
        static void Main(string[] args)
        {
            var logger = NLog.LogManager.GetLogger("LEVEL_INFO");
            logger.Info("Hello_World");
            Console.ReadKey();
        }
    }
}

[결과]

콘솔에 아래 로그 메시지는 표시되지만 로그 파일은 출력되지 않음.

 

minLevel에 대해서

miniLevel에서 설정한 로그 레벨 이상의 로그 메시지를 출력한다.

하나의 로거에 쓰여진 메시지는 logging-rules 설정에 의해 복수의 타겟으로 출력한다.

아래 설정 파일의 경우

로그 레벨 Info 이상의 정보는 콘솔로 출력하고

로그 레벨 Error 이상의 정보는 로그 파일로 출력한다.

<?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">

  <targets>
    <target name="logfile" xsi:type="File" fileName="file.txt" />
    <target name="logconsole" xsi:type="Console" />
  </targets>

  <rules>
    <logger name="*" minlevel="Info" writeTo="logconsole" />
    <logger name="*" minlevel="Error" writeTo="logfile" />
  </rules>
</nlog>

 

Log levels

로그 레벨은 메시지의 중요도나 상세도를 의미한다.

  • Trace
    프로토콜의 페이로드 등 대량으로 상세한 데이터를 출력할 때 사용. 개발할때만 유효
  • Debug
    Trace 레벨보다 상세하지 않은 디버깅 중 로그를 출력할 때 사용. 개발할때만 유효
  • Info
    정보 메시지. 가동환경에서만 유효
  • Warn
    경고 메시지. 회복가능하거나 일시적인 장애에 관한 경고 메시지를 출력한다.
  • Error
    에러 메시지. Exception 정보를 출력한다.
  • Fatal
    매우 중대한 오류 메시지.
public class MyClass
{
  private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

  public void MyMethod1()
  {
    //각 로그 레벨의 출력 샘플
    logger.Trace("Sample trace message");
    logger.Debug("Sample debug message");
    logger.Info("Sample informational message");
    logger.Warn("Sample warning message");
    logger.Error("Sample error message");
    logger.Fatal("Sample fatal error message");

    //또는 Log()메서드에 로그 레벨과 메시지를 전달하여 출력할 수 있다.
    logger.Log(LogLevel.Info, "Sample informational message");


    // Exseption정보 출력 예제
    try
    {
        //do something
    }
    catch (Exception ex)
    {
        logger.Error(ex, "ow noos!"); // render the exception with ${exception}
        throw;
    }
  }
}

 

레이아웃 및 레이아웃 렌더링(Layouts and LayoutRenderers)

로그 메시지 레이아웃을 설정할 수 있다. 아래 프로그램에서 출력하는 메시지를 비교해보기.

namespace NLogService
{
    class Program
    {
        static void Main(string[] args)
        {
            NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
            Exception ex = new Exception();
            logger.Error(ex);
        }
    }
}

1. 기본 심플 레이아웃

<target name="logfile" xsi:type="File" fileName="file.txt" layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />

2. 출력 메시지

2023-08-14 21:28:01.3018|ERROR|NLogService.Program|System.Exception: 종류 'System.Exception' 의 예외가 발생했습니다.

3. 상세한 로그 레이아웃

<target name="logfile" xsi:type="File" fileName="file.txt" layout="${longdate}|${level:uppercase=true}|${logger}|${threadid}|${message}|${exception:format=tostring}" />

4. 출력 메시지

2023-08-14 21:27:19.1566|ERROR|NLogService.Program|1|System.Exception: 종류 'System.Exception' 의 예외가 발생했습니다. |System.Exception: 種類 'System.Exception' 의 예외가 throw 되었습니다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함