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

问题描述 投票:1回答:1

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

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

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

c# .net console-application scheduler serilog
1个回答
2
投票

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

如果你不使用 RollingInterval 并将日志信息写到一个文件中,那么你就可以准确地知道文件的名称,因为你已经在日志管道配置中指定了它。logs\\log-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:\Temp\logs\")
    .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

© www.soinside.com 2019 - 2024. All rights reserved.