NLog журнал ротация / архивирование противоречивое поведение

У меня есть проект, который использует NLog для создания и поддержки файлов журнала. Это включает в себя использование ротации журналов / архивирование старых файлов журналов. Тем не менее, я видел, что настройки архивации NLog не всегда соблюдаются, особенно в отношении параметра конфигурации ArchiveEvery. Основываясь на этом ответе stackru, я предполагаю, что библиотека проверяет время последней записи для файла, чтобы проверить, должен ли он заархивировать текущий файл и запустить новый, но не до тех пор, пока новое сообщение журнала не будет передано в библиотеку.

В моем проекте библиотека настроена на архивирование каждую минуту. Это должно быть хорошо, так как мой проект регистрирует сообщения каждые несколько секунд, и я ожидаю увидеть заархивированный файл каждую минуту, потому что сообщения журнала продолжают поступать. Однако я вижу противоречивое поведение, иногда между несколькими, но в последующем, архивированными файлами журнала. Например, в настоящее время у меня есть следующие файлы на моем диске:

Filename              | Last write time
----------------------+------------------
Log.01-06-2017.2.csv  | 1-6-2017 10:42
Log.01-06-2017.3.csv  | 1-6-2017 10:44
Log.01-06-2017.4.csv  | 1-6-2017 10:46
Log.01-06-2017.5.csv  | 1-6-2017 10:47
Log.01-06-2017.6.csv  | 1-6-2017 10:48
Log.01-06-2017.7.csv  | 1-6-2017 10:52
Log.01-06-2017.8.csv  | 1-6-2017 11:01
Log.01-06-2017.9.csv  | 1-6-2017 11:04
Log.01-06-2017.20.csv | 1-6-2017 11:43
Log.01-06-2017.csv    | 1-6-2017 11:46

Как видите, заархивированные файлы создаются не каждую минуту. Что касается моего конфига NLog на данный момент:

fileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;
fileTarget.ArchiveEvery = FileArchivePeriod.Minute;
fileTarget.KeepFileOpen = true;
fileTarget.AutoFlush = true;
fileTarget.ArchiveDateFormat = "dd-MM-yyyy";
fileTarget.ArchiveOldFileOnStartup = true;

Я изо всех сил пытаюсь заставить это работать "должным образом". Я пишу это в скобках, так как у меня нет большого опыта работы с NLog и я не знаю, как ведет себя библиотека. Я надеялся найти больше информации на вики-странице NLog на GitHub, но не смог найти там нужную мне информацию.

редактировать

fileTarget.FileName состоит из базовой папки (storage.Folder.FullName = "C:\ProgramData\\"), подпапки (LogFolder = "AuditLog") и имени файла (LogFileName = "Log.csv"):

fileTarget.FileName = Path.Combine(storage.Folder.FullName, Path.Combine(LogFolder, LogFileName));

FileTarget.ArchiveFileName не установлен, поэтому я представляю его по умолчанию. Может ли быть так, что указание полного пути для FileName приводит к ошибкам? Если да, есть ли другой способ указать конкретную папку для размещения файлов журнала?

0 ответов

Другие вопросы по тегам