Serilog — сохраняйте только 7 последних файлов

#serilog

Вопрос:

Я использую serilog и указываю дату как часть своего имени файла. Это простой способ получить доступ к файлу. В настоящее время я проверяю ночные события, и я просто выбираю последний файл утром.

Теперь я хочу продержаться всего 7 дней. Это было сохранено для filecountlimit. Однако это тоже работает не так, как я хочу, так как это может привести к проверке этого конкретного имени файла.

Как я могу это сделать? (У меня была своя собственная система регистрации, которая удаляла файлы старше недели) Где описаны все свойства serilog? Мне не хватает их общего обзора.

         //Add Serilog
           string logFileName = HostingEnvironment.MapPath(@"~/new_"   DateTime.Now.ToString("yyyyMMdd")   ".log");
           Log.Logger = new LoggerConfiguration()
               .WriteTo.File(
                   path: logFileName,
                   retainedFileCountLimit: 7,
                   shared: true,
                   rollingInterval: RollingInterval.Day,
                   rollOnFileSizeLimit: true,
                   fileSizeLimitBytes: 123456,
                   flushToDiskInterval: TimeSpan.FromSeconds(5))
               .CreateLogger();
           Log.Information("Starting Serilog #1");
 

Ответ №1:

Приемник файлов автоматически включает дату в имя файла — не включайте DateTime.Now ее в имя файла, и пусть об этом позаботится Serilog, и вы получите ожидаемое сохранение.

 var log = new LoggerConfiguration()
    .WriteTo.File
    (
        "new_.txt", // <<<<<<<<<<<<<<<<<<<<<<
        rollingInterval: RollingInterval.Day,
        retainedFileCountLimit: 7,
        // ...
    )
    .CreateLogger();
 

Это добавит период времени к имени файла, создав набор файлов, подобный:

 new_20180631.txt
new_20180701.txt
new_20180702.txt
 

Документация приемника файлов находится в репозитории на GitHub.