我在C# Console应用程序中使用Serilog库来建立一个日程安排程序,它将每天的消息记录在一个日志文件中。 文件名是用下面的代码动态创建的。
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs\\log-scheduler-.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
我怎样才能知道我的Console程序创建的文件名呢? 在我的程序结束后,我想把日志文件作为附件发送出去。
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)是 不 从你的应用程序中发送电子邮件,只需将日志传送到服务器,如 序列 服务器,让您可以轻松浏览日志,应用过滤器等,这比在文本编辑器上打开附在电子邮件中的日志文件要好得多。