티스토리 뷰
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 되었습니다.
'개발언어 > C#' 카테고리의 다른 글
【VB.NET、C#】불필요한 공백 제거 (4) | 2024.03.07 |
---|---|
[C#] WinForm의 DataGridView 관련 설정 (4) | 2024.03.05 |
[C#] DateTime 시간차이 구하기 (0) | 2023.05.24 |
[C#] 디버그모드 릴리즈모드 (0) | 2022.08.10 |
[C#] in/out/ref 파라미터 한정자의 공통점, 차이점, 예제 (0) | 2022.07.01 |
- Total
- Today
- Yesterday
- in/out/ref 차이점
- pl/sql
- PL/SQL 예외처리문
- C#
- 에러
- 참조전달
- USER_SYS_PRIVS
- 동기통신
- in/out/ref 예제
- DBA_SYS_PRIVS
- PL/SQL 실행문
- grant
- 유틸리티
- rollback
- EXCEPTION절
- TrimEnd
- 유틸리티에러
- DECLARE절
- in/out/ref
- vba
- commit
- VB.Net
- 시간차이
- Oracle
- 후나빙
- in/out/ref 공통점
- 초기화파라미터파일
- REVOKE
- NLog
- BEGIN절
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |