1

我正在尝试使用 Serilog 的电子邮件接收器作为简单控制台应用程序的一部分。这个应用程序的生命周期很短:它检查数据库并用新数据更新订阅者。如果发生错误,我想发送电子邮件。

问题是,如果我不将 Thread.Sleep 放在应用程序的末尾,则不会发送电子邮件。

有没有办法清除电子邮件队列并强制尽快发送电子邮件?

我的代码是:

    Log.Logger = new LoggerConfiguration()
        .WriteTo.ColoredConsole()
        .WriteTo.EventLog("LOGSOURCE", restrictedToMinimumLevel: LogEventLevel.Warning)
        .WriteTo.Email(connectionInfo: new EmailConnectionInfo()
        {
            EmailSubject = "App error",
            ToEmail = "support@company.com",
            MailServer = "smtp.office365.com",
            NetworkCredentials = new NetworkCredential("sender@company.com", "Password"),
            Port = 587,
            FromEmail = "sender@company.com", 
            EnableSsl = false

        },
        batchPostingLimit: 1,
        restrictedToMinimumLevel: LogEventLevel.Error)
        .CreateLogger();

Log.Error("Error message");

任何帮助表示赞赏

4

3 回答 3

1

您可以尝试使用调试 SerilogSerilog.Debugging.SelfLog.Out = Console.Out

我认为您应该将 EnableSsl = true 与 o365 一起使用,并将 batchPostingLimit 保留为默认值 = 100

于 2015-06-29T03:17:34.000 回答
0

根据接收器(我不确定电子邮件),处理记录器可能会产生正确的效果:

((IDisposable)Log.Logger).Dispose();

如果做不到这一点,可能需要在电子邮件接收器中进行额外的工作以确保正确刷新内容(在 Serilog 跟踪器上提出票证将有助于解决此问题)。

于 2015-05-13T22:20:45.150 回答
0

您是否尝试过以下操作?

Log.CloseAndFlush();
于 2017-06-30T17:45:08.190 回答