Почему RollingInterval.Day продолжает создавать новые файлы журналов Serilog? - PullRequest
1 голос
/ 12 июня 2019

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

Приведенный ниже код является именно тем, что я использовал все время, и он работал в течение хороших 4-5 дней тестирования и дальнейшей разработки моего приложения UWP.Затем я думаю, что мое приложение начало создавать несколько файлов с одинаковой датой, озаглавив их logs-yyyymmdd_01, logs-yyyymmdd_02 и т. Д.

Это в конструкторе MainPageViewModel

            Log.Logger = new LoggerConfiguration().MinimumLevel.Debug()
            .WriteTo.File(this.GetFile("logs-"), rollingInterval: RollingInterval.Day)
            .CreateLogger();

        public string GetFile(String FileName)
        {
            string s = ApplicationData.Current.LocalFolder.Path;
            return s + "\\" + FileName;
        }

Iесть подозрение, что он вызывает конструктор несколько раз, и это может быть частью проблемы.Но скользящий интервал должен создавать новый файл только тогда, когда наступает новый день, верно?Потому что, когда приложение запускалось несколько раз, оно использовало любой файл, соответствующий сегодняшней дате.Поэтому мне либо нужен способ сделать Log.Logger статическим, чтобы он был универсальным, либо способ заставить его использовать только один файл.Любая помощь будет высоко ценится

1 Ответ

1 голос
/ 12 июня 2019

Вы установили Serilog.Sinks.RollingFile от NuGet?Насколько я понимаю, аспект скользящего файла для Serilog.Sinks.File все еще зависит от этой зависимости.

С учетом сказанного я использую следующее:

        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.Console()
            .WriteTo.RollingFile($@"{Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)}\Organization\{Path.GetFileNameWithoutExtension(Process.GetCurrentProcess().MainModule.FileName)}\Logs\log.txt")
            .CreateLogger();

По умолчанию используется файл ежедневного журнала, если толькоразмер становится слишком большим.

...