Serilog 电子邮件接收器:应用程序结束时的单个电子邮件

Serilog Email sink: single email at end of application

我在用 C# 编写的控制台应用程序中使用 Serilog.Sinks.Email。 它是 "restrictedToMinimumLevel" = "Warning",并且我在整个程序中散布了警告和错误消息。

当我昨天 运行 这个应用程序时,我在 运行 结束时收到一封电子邮件(当控制达到 Log.CloseAndFlush() 时),这封电子邮件有综合警告和运行.

期间产生的错误

这是所需的功能,我很高兴我不需要编写一个包装器 class 来实现它。

当我今天 运行 执行相同的脚本时,遇到的每个错误都会收到一封电子邮件。

我对这种不稳定的行为感到困惑。下面是我的 App.config 文件的摘录:

<add key="serilog:using:Email" value="Serilog.Sinks.Email" />
<add key="serilog:write-to:Email.fromEmail" value="<email address>" />
<add key="serilog:write-to:Email.toEmail" value="<email address>" />
<add key="serilog:write-to:Email.mailServer" value="<mail server>" />
<add key="serilog:write-to:Email.mailSubject" value="<application name> [{MachineName}] [User: {UserName}]" />
<add key="serilog:write-to:Email.outputTemplate" value="{Timestamp:yyyy-MM-dd  HH:mm:ss}:: [{Level:u3}] {Message}{NewLine}" />
<add key="serilog:write-to:Email.restrictedToMinimumLevel" value="Warning" />

我是否应该使用任何配置设置来确保脚本在任何 运行 结束时始终发送最多一封电子邮件(包含合并的警告和错误)?

任何人都可以向我指出在这方面有帮助的文档吗?

我认为你已经达到了一批的限制或已经改变了它。默认情况下,它设置为 100,您可以在下面的代码中看到 Serilog.Sinks.Email.EmailSink:

/// <summary>
/// A reasonable default for the number of events posted in
/// each batch.
/// </summary>
public const int DefaultBatchPostingLimit = 100;

将您的 App.config 设置为某个不会达到的限制,例如:

<add key="serilog:write-to:Email.defaultBatchPostingLimit " value="999999" />

我通过编写包装器解决了这个问题 class。