在NLog中缓冲日志消息并手动将它们刷新到目标

时间:2011-11-16 14:31:23

标签: c# logging wrapper nlog buffering

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

如果我定义FlushTimeoutBufferSize的{​​{1}},一切仍然可以正常运作。 但是如果没有设置FlushTimeout和BufferSize,我就无法使它工作。

就像SO Force BufferingTargetWrapper to empty这个问题所回答的那样,我没有这样的东西:

BufferedTargetWrapper

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

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

1 个答案:

答案 0 :(得分:16)

根据文档,您的方法不适用,但没关系。只需给flush方法一个空的lambda表达式:

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