NLog回调可能吗?
NLog callback possible?
我正在将自己开发的日志系统转换为 NLog,我想知道是否有办法将事件添加到 Logger 或以其他方式支持一种机制,当我记录一条消息时我可以获得回调带有最终格式化消息和 LogLevel。我目前使用类似的方式将服务器消息发送回连接的客户端。
感谢
这是我在评论中谈论的内容的 MCVE。创建一个接受一些回调函数的目标:
[Target("MyFirst")]
public sealed class MyFirstTarget : TargetWithLayout
{
private readonly Action<string>[] _callbacks;
public MyFirstTarget(params Action<string>[] callbacks)
{
_callbacks = callbacks;
}
protected override void Write(LogEventInfo logEvent)
{
foreach (var callback in _callbacks)
{
callback(logEvent.FormattedMessage);
}
}
}
配置 NLog 以使用目标。我以编程方式执行此操作,因为回调是在构造函数中传递的。您也可以在 NLog.config 中配置目标,但您的目标需要是单例,这样您才能在代码中注册回调。
class Program
{
public static void Main()
{
LogManager.Configuration.AddTarget("MyFirst", new MyFirstTarget(s => Debug.WriteLine(s)));
var logger = LogManager.GetCurrentClassLogger();
logger.Debug("test");
}
}
在没有其他 NLog 配置的情况下(将此代码复制到一个空项目并添加 NLog nuget 包),这将向您的调试 window 发出一条消息。
我正在将自己开发的日志系统转换为 NLog,我想知道是否有办法将事件添加到 Logger 或以其他方式支持一种机制,当我记录一条消息时我可以获得回调带有最终格式化消息和 LogLevel。我目前使用类似的方式将服务器消息发送回连接的客户端。
感谢
这是我在评论中谈论的内容的 MCVE。创建一个接受一些回调函数的目标:
[Target("MyFirst")]
public sealed class MyFirstTarget : TargetWithLayout
{
private readonly Action<string>[] _callbacks;
public MyFirstTarget(params Action<string>[] callbacks)
{
_callbacks = callbacks;
}
protected override void Write(LogEventInfo logEvent)
{
foreach (var callback in _callbacks)
{
callback(logEvent.FormattedMessage);
}
}
}
配置 NLog 以使用目标。我以编程方式执行此操作,因为回调是在构造函数中传递的。您也可以在 NLog.config 中配置目标,但您的目标需要是单例,这样您才能在代码中注册回调。
class Program
{
public static void Main()
{
LogManager.Configuration.AddTarget("MyFirst", new MyFirstTarget(s => Debug.WriteLine(s)));
var logger = LogManager.GetCurrentClassLogger();
logger.Debug("test");
}
}
在没有其他 NLog 配置的情况下(将此代码复制到一个空项目并添加 NLog nuget 包),这将向您的调试 window 发出一条消息。