使用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)是 不 从你的应用程序中发送电子邮件,只需将日志传送到服务器,如 序列 服务器,让您可以轻松浏览日志,应用过滤器等,这比在文本编辑器上打开附在电子邮件中的日志文件要好得多。
以上是关于使用Serilog将程序结束时创建的日志文件通过电子邮件发送出去的主要内容,如果未能解决你的问题,请参考以下文章
如何在 .Net Framework 中使用 Serilog 为每个 API 创建日志文件?
在 ASP.NET Core 2.2 中使用 InProcess 托管模型时,Serilog 不会将日志写入文件
关于c#:Filter Serilog日志取决于上下文源到不同的接收器?