编辑: 下面的被接受的答案部分地起作用。 它确实推迟了文件的创建,但它不尊重最小的LogEventLevel
(因为每当记录发生时,即使最终不写入文件,也会调用推迟的行)。 然而,它确实实现了我的总体目标“无空文件创建”(我将在应用程序中记录错误),因此我将其保留为被接受的答案。
我的最终代码如下:
new LoggerConfiguration().WriteTo.Map("", "", (_, writeTo) => writeTo.File("SampleName.log")).CreateLogger();
我有一个简单的控制台应用程序,其中使用了Serilog和文件汇聚。
new LoggerConfiguration().WriteTo.File("SampleName.log", LogEventLevel.Error).CreateLogger();
理想情况下,我只希望当需要记录日志(在我的情况下为错误)时,它才会在磁盘上创建一个日志文件。然而,如果应用程序运行并且没有发生错误就完成了,Serilog仍然会创建一个空文件。有没有一种方法可以指示Serilog只在有东西要记录时才创建文件?
Serilog.Sinks.Map
可能有效,因为它在发出日志事件时创建了汇聚器。/cc @DoctorBlue - C. Augusto Proiete.exe
旁边有一个空文件,那么你可能需要考虑另一件事情,即将日志文件存储在其他地方,例如%localappdata%\yourapp\yourapp.log
,这样它就始终不会被看到... 这是我通常使用我的应用程序的方式,因为只有在排除故障时才会偶尔检查日志...Serilog.Sinks.Map
非常酷且非常有用,可以将特定属性映射到接收器,但我个人不会仅仅为了避免空日志文件而在我的日志记录管道中增加Serilog.Sinks.Map
的开销。 - C. Augusto Proiete