我在用C#编写的控制台应用程序中使用Serilog.Sinks.Email。 它是" restrictedToMinimumLevel" ="警告",我在整个程序中散布了警告和错误消息。
昨天运行此应用程序时,我在运行结束时收到了一封电子邮件(当控件到达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" />
我是否应该使用任何配置设置,以确保脚本在任何运行结束时始终最多发送一封电子邮件(包含合并警告和错误)?
有谁能请我指出在这方面有帮助的文件?
答案 0 :(得分: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" />
答案 1 :(得分:0)
我通过编写包装器类解决了这个问题。