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 发出一条消息。