缓冲NLog中的日志消息,并手动将其刷新到目标

本文关键字:刷新 目标 NLog 日志 消息 缓冲 | 更新日期: 2023-09-27 18:14:44

我正在尝试通过NLog MailTarget进行日志。它工作得很好,但是我想用BufferedTargetWrapper包装邮件目标来缓冲日志消息,直到一个预定义的代码点,在那里我想手动刷新缓冲区,并通过单个邮件(如邮件目标中定义的)发送以前缓冲的日志消息。

如果我定义FlushTimeoutBufferedTargetWrapperBufferSize,一切仍然正常工作。但是如果FlushTimeout和BufferSize没有设置,我不能让它工作。

就像在这个问题上回答的那样,强迫BufferingTargetWrapper清空我没有这样的东西:

 LogManager.Configuration.AllTargets.Where(t => t != null && t is BufferingTargetWrapper).ToList().
            ForEach(b => ((BufferingTargetWrapper)b).Flush(null));

但是文档和这个答案与我的NLog版本(2.0.0.2000)相矛盾。没有不带参数的刷新方法,只有异步目标的刷新方法。

是否有一种方法可以强制BufferingTargetWrapper将所有记录的消息刷新到包装的目标(通过邮件发送)?

缓冲NLog中的日志消息,并手动将其刷新到目标

根据文档,您的方法不应该工作,但它是好的。只需给flush方法一个空的lambda表达式:

LogManager.Configuration.AllTargets
    .OfType<BufferingTargetWrapper>()
    .ToList()
    .ForEach(b => b.Flush(e =>
        {
            //do nothing here
        }));