Serilog: предотвратить создание пустого файла журнала - PullRequest
2 голосов
/ 09 апреля 2020

РЕДАКТИРОВАТЬ: Ниже принятый ответ работает частично . Он откладывает создание файла, но не учитывает минимум LogEventLevel (поскольку отложенная строка вызывается всякий раз, когда ведется запись в журнал, даже если в итоге она не записывает данные в файл). Тем не менее, она выполняет sh мою всеобъемлющую цель «не создавать пустых файлов» (и я буду просто регистрировать ошибки в своем приложении), поэтому я сохраняю это как принятый ответ.

Мой окончательный вариант код выглядит так:

new LoggerConfiguration().WriteTo.Map("", "", (_, writeTo) => writeTo.File("SampleName.log")).CreateLogger();

У меня есть простое консольное приложение, в котором я использую Serilog и приемник файлов:

new LoggerConfiguration().WriteTo.File("SampleName.log", LogEventLevel.Error).CreateLogger();

В идеале, я бы хотел только это создать файл журнала на диске, когда есть что регистрировать (ошибки в моем сценарии). Однако, если приложение работает и завершается без ошибок, Serilog все равно создаст пустой файл. Есть ли способ поручить Serilog только создать файл, когда ему есть что регистрировать?

1 Ответ

3 голосов
/ 09 апреля 2020

Это невозможно на момент написания этой статьи. Файл создается на диске, как только создается экземпляр FileSink , и нет никакой опции конфигурации для изменения этого поведения.

Вы можете создать приемник, который обернет FileSink и лениво создает экземпляр FileSink всякий раз, когда отправляется первое событие журнала.

Или вы можете удалить пустой файл в конце, непосредственно перед завершением приложения (но после вызова Log.CloseAndFlush).

...