在 NLog 将数据发送到目标之前准备数据?

Prepare data before NLog send it to target?

我需要在 NLog 将其发送到目标之前序列化一些对象。我可以编写自定义目标,但我必须为每个可能的日志目标编写自定义目标。

我需要知道的是 NLog 是否会将消息(基于级别)记录到任何目标,如果是,序列化数据。如果日志数据指出根据 NLog 配置不记录的级别,那么我想避免序列化对象,因为这需要时间。

有什么方法可以在 NLog 将数据发送到目标之前准备数据,还是我必须在自定义目标中解决这个问题 类?

您可以获得 Logger 并检查 IsXXXEnabled 属性。

例如:

class MyExpensiveClass
{
    public void string Serialize()
    {
         return SomethingExpensive;
    }
}

class ThisNeedsLogging
{
    private static Logger logger = LogManager.GetCurrentClassLogger();

    private MyExpensiveClass expensive = new MyExpensiveClass();

    public void TraceSomething()
    {
        if (logger.IsDebugEnabled)
            logger.Debug(expensive.Serialize());
    }
}