gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:02:18 29 4
gpt4 key购买 nike

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

如果我定义了 FlushTimeoutBufferedTargetWrapperBufferSize,一切仍会按预期正常工作。但是,如果未设置 FlushTimeout 和 BufferSize,我将无法正常工作。

就像在 SO 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) 相矛盾。没有不带参数的flush方法,只有异步目标的flush方法。

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

最佳答案

根据文档,您的方法应该行不通,但没问题。只需给 flush 方法一个空的 lambda 表达式:

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

关于c# - 在 NLog 中缓冲日志消息并手动将它们刷新到目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8153286/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com