序列号-最新的文件不应该有时间戳



我们目前正在.NET Core 3.1控制台应用程序中使用Serilog作为日志框架。有没有可能,只有最新的文件没有附加时间戳/编号。这意味着Serilog必须在创建新的日志文件后立即更新文件。

配置如下的示例:

.WriteTo.File(
"application.log", 
outputTemplate: "some example output template", 
fileSizeLimitBytes: 1000, 
rollOnFileSizeLimit: true)

现在应该创建/更新以下文件。此外,我会在这个例子的括号(#(中写一个Id,这样你就可以更容易地区分它们:


创建第一个日志文件后的目录:application.log(0(

创建第二个日志文件后的目录:application.log(1(|application_1.log(0(

创建第三个日志文件后的目录:application.log(2(|application_1.log(0(|application_2.log(1(


正如您所看到的,最新的文件应该始终被称为"application.log",而其他文件的名称应该用一些数字/时间戳更新。

正在发生但不应该发生的事情:


创建第一个日志文件后的目录:application.log(0(

创建第二个日志文件后的目录:application_1.log(1(|application.log(0(

创建第三个日志文件后的目录:application_2.log(2(|application_1.log(1(|application.log(0(


如您所见,创建的第一个文件始终称为"application.log",但不是最新创建的文件。

Serilog是否有可能获得第一个行为?有人告诉我,这种行为可以通过log4net实现,但我不知道这是不是真的,如果可能的话,我想坚持使用Serilog。

不要问我原因,因为我不认识他们(这是客户的请求(。还要提前感谢您对这个奇怪问题的每一个有用答案!:(

不幸的是,这是Serilog.Sinks.File中的一个已知问题,源于从log4net或NLog迁移的人希望他们的奶酪保持静止。

如果我要做一个预测,那么这样的功能不太可能在任何时候进入官方的Serilog.Sinks.File接收器,因为它(波纹重命名(本质上是脆弱的。

PersistentFileFile接收器的一个分叉、独立维护的变体,它实现了符合您需求的语义。

最新更新