【问题标题】:Serilog Email sink: single email at end of applicationSerilog 电子邮件接收器:应用程序结束时的单个电子邮件
【发布时间】:2017-06-30 18:35:10
【问题描述】:

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

当我昨天运行这个应用程序时,我在运行结束时收到了一封电子邮件(当控制到达 Log.CloseAndFlush() 时),这封电子邮件包含运行期间生成的综合警告和错误。

这是所需的功能,我很高兴我不需要编写实现它的包装类。

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

我对这种古怪的行为感到困惑。下面是我的 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" />

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

谁能指出我在这方面可以提供帮助的文档?

【问题讨论】:

    标签: c# email configuration serilog


    【解决方案1】:

    我认为您已达到一批限制或已更改。默认情况下,它设置为 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" />
    

    【讨论】:

    • 我确实试过这个。我很抱歉在帖子中没有提到这一点。事实上,它会为每个类型的语句生成一封电子邮件:Log.Error("Encountered an error.");过去,我会在脚本末尾收到一条综合错误消息。我尝试了较大的 defaultBatchPostingLimit 值,但没有帮助。
    【解决方案2】:

    我通过编写一个包装类解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多