繁体   English   中英

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

[英]Buffering log messages in NLog and manually flushes them to target

我试图通过NLog MailTarget登录。 它运行得很好,但我想用BufferedTargetWrapper包装mailtarget来缓冲日志消息,直到预定义的代码点,我想手动刷新缓冲区并通过单个邮件发送当前缓冲的日志消息(如邮件中定义的那样)目标)。

如果我定义一个FlushTimeoutBufferedTargetWrapperBufferSize ,一切仍然可以正常工作。 但是如果没有设置FlushTimeout和BufferSize,我就无法使它工作。

就像在SO Force BufferingTargetWrapper上的这个问题中回答的那样,我没有这样的东西:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM