使用Serilog将程序结束时创建的日志文件通过电子邮件发送出去

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Serilog将程序结束时创建的日志文件通过电子邮件发送出去相关的知识,希望对你有一定的参考价值。

我在C# Console应用程序中使用Serilog库来建立一个日程安排程序,它将每天的消息记录在一个日志文件中。 文件名是用下面的代码动态创建的。

Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logslog-scheduler-.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();

我怎样才能知道我的Console程序创建的文件名呢? 在我的程序结束后,我想把日志文件作为附件发送出去。

答案

Serilog并没有暴露出检查被创建的文件名的方法,在写这篇文章的时候。

如果你不使用 RollingInterval 并将日志信息写到一个文件中,那么你就可以准确地知道文件的名称,因为你已经在日志管道配置中指定了它。logslog-scheduler-.txt.

但如果你想使用一个 RollingInterval 然后,你可以做的是,检查你的日志文件被写入的文件夹,并找到自应用程序启动以来更新的日志文件,通过捕获当前时间戳,当你的应用程序启动时,然后查看 LastWriteTimeUtc 属性,查看自该时间以来发生的任何变化。

例如

DateTime appStartTime = DateTime.UtcNow;

// ... (app code)

// Ensure that all messages are flushed to the file
Log.CloseAndFlush();

// Get all log files modified since the app started
var logFilesUpdatedInThisSession = new DirectoryInfo(@"C:Templogs")
    .EnumerateFileSystemInfos("log-scheduler-*.txt")
    .Where(f => f.LastWriteTimeUtc >= appStartTime)
    .OrderBy(f => f.LastWriteTimeUtc)
    .ToList();

if (logFilesUpdatedInThisSession.Any())
{
    // Send all files via e-mail ...
}   

另一种选择(更好的IMO)是 从你的应用程序中发送电子邮件,只需将日志传送到服务器,如 序列 服务器,让您可以轻松浏览日志,应用过滤器等,这比在文本编辑器上打开附在电子邮件中的日志文件要好得多。

Seq

以上是关于使用Serilog将程序结束时创建的日志文件通过电子邮件发送出去的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .Net Framework 中使用 Serilog 为每个 API 创建日志文件?

在 ASP.NET Core 2.2 中使用 InProcess 托管模型时,Serilog 不会将日志写入文件

Serilog 不会将日志写入文件

关于c#:Filter Serilog日志取决于上下文源到不同的接收器?

serilog应用在docker容器中,日志文件目录不会自动创建,需要手动创建目录,或者创建镜像的时候就包含进去

Windows-Service 中的 Serilog 未写入日志文件