일반적으로 여러개의 class library혹은 여러개의 class 내부에서 NLog를 사용해 log message를 생성해 내게되는데, 매번 log message가 발생 할 때 마다 해당 메세지를 가공해서 GUI상에 뿌려준다거나 GRPC나 WebSocket 혹은 Kafka같은 Message Broker로 publish하는 기능이 필요할 때가 있습니다.
이럴 때 아래와같이 NLog의 MethodCallTarget 클래스를 사용하면 쉽게 구현이 가능합니다.
// Callback 함수를 정의합니다.
var target = new MethodCallTarget("LogNotify", async (logEvent, parameters) =>
{
// 여기서 본인이 원하는 처리를 하면 됩니다. 내부에 비동기 호출이 없으면 위에 async를 빼주세요.
if (logEvent.Level > NLog.LogLevel.Debug)
{
...
}
});
// 모든 log message level에 대해 해당 callback 함수가 호출되도록 등록합니다.
LogManager.Configuration.AddRuleForAllLevels(target);
// logger 설정을 업데이트 합니다.
LogManager.ReconfigExistingLoggers();
공식 홈페이지의 문서(https://nlog-project.org/documentation/v2.0.1/html/T_NLog_Targets_MethodCallTarget.htm)의 예제는 아래와 같습니다.
using System;
using NLog;
using NLog.Targets;
using System.Diagnostics;
public class Example
{
public static void LogMethod(string level, string message)
{
Console.WriteLine("l: {0} m: {1}", level, message);
}
static void Main(string[] args)
{
MethodCallTarget target = new MethodCallTarget();
target.ClassName = typeof(Example).AssemblyQualifiedName;
target.MethodName = "LogMethod";
target.Parameters.Add(new MethodCallParameter("${level}"));
target.Parameters.Add(new MethodCallParameter("${message}"));
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Debug);
Logger logger = LogManager.GetLogger("Example");
logger.Debug("log message");
logger.Error("error message");
}
}
'Development > C#' 카테고리의 다른 글
[C#] HMACSHA256 클래스를 이용해서 사용자 비밀번호를 암호화하기 (0) | 2023.02.15 |
---|---|
[C#] Project publish할 때 "Could not find a part of the path..." 오류가 발생할 경우 (0) | 2023.02.12 |
[C#] 두 변수의 값 바꾸기(Swap) (0) | 2023.02.07 |
[Json.Net] SelectToken/SelectTokens 사용법 (0) | 2023.01.25 |
[C#] JSON Serialization 할 때 enum 타입을 문자열 형태로 변환시키기 (0) | 2023.01.19 |