BufferingTargetWrapper

BufferingTargetWrapper

我正在尝试通过NLog MailTarget登录。
它工作正常,但我想用BufferedTargetWrapper包装mailtarget来缓冲日志消息,直到预定义的代码点为止,在这里我想手动刷新缓冲区并通过单个邮件发送先前缓冲的日志消息(例如邮件中定义的)目标)。

如果我定义了FlushTimeoutBufferSizeBufferedTargetWrapper,那么一切仍然可以正常进行。
但是,如果未设置FlushTimeout和BufferSize,我将无法正常工作。

像在Force BufferingTargetWrapper to empty上回答这个问题一样,我没有这样的东西:

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

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

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

最佳答案

根据文档,您的方法不起作用,但这很好。只需给flush方法一个空的lambda表达式即可:

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

10-01 18:54