serilog - 是否可以将 Serilog 配置为截断(即清空)每个新进程的日志文件?

标签 serilog

从 nlog 转移到 serilog,我希望我的 .NET 框架桌面应用程序在每次运行时重用一个静态命名的日志文件,但在每个新进程中清除文件的内容。可以这样配置serilog吗?
This is a similar question ,但并不完全相同。在链接的问题中,用户每次使用一个具有唯一文件名的新日志文件。就我而言,我想每次都使用相同的日志文件名。

最佳答案

在撰写本文时,这不是 Serilog 可以为您做的事情。
Serilog.Sinks.File is hard-coded to open the file with FileMode.Append 因此,如果文件已经存在,它将始终在文件末尾附加内容。
FileLifecycleHooks 允许您在打开文件时进行拦截,这将使您有机会删除文件的内容(通过在流上调用 SetLength(0)),但不幸的是 Serilog.Sinks.File 使用的流实现( WriteCountingStream ) does not support SetLength
你最好的办法是在应用程序启动时自己截断或删除日志文件 ,然后让 Serilog 创建一个新文件。
例如

// Ensure that the log file is empty 
using (var fs = File.OpenWrite("mylog.log")) { fs.SetLength(0); }

// ... Configure Serilog pipeline

关于serilog - 是否可以将 Serilog 配置为截断(即清空)每个新进程的日志文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64657367/

相关文章:

.net - Destruct.ByTransforming<System.Type> 似乎没有生效

c# - 如何在多个类中使用带有 Serilog 的同一个日志文件

asp.net-core - 使用 aspnet 核心排除特定端点 serilog 日志记录

c# - 在运行 Asp.Net Core 2 的 Webapi 2 上使用 Serilog 的 DI ILogger

logging - 如何使用 ServiceStack.Logging ILog 记录消息关联 ID?

c# - 无法在 .NET 6 项目上使用 Serilog 中间件

c# - Serilog 异步文件日志记录 - 如何添加滚动

c# - 使用自定义字段进行 Elasticsearch 的 Serilog 配置

c# - Serilog 未记录到 SQL Server

c# - 配置 Serilog.Extensions.Logging.File