Nlog архивирует не все файлы? - PullRequest
0 голосов
/ 29 мая 2020

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

Это мои текущие настройки. В целях тестирования я изменил его на архивирование каждую минуту:

<target name="file" xsi:type="File"
            layout="${longdate} ${logger} ${message}${exception:format=ToString}"
            fileName="${basedir}/LOG/${date:format=yyyy-MM-dd}.log"
            archiveFileName="${basedir}/LOG/OLD_LOGS/{#}.log"
            archiveDateFormat="yyyy-MM-dd"
            archiveNumbering="Date"
            archiveEvery="Minute" 
      />

Считайте фактическую дату этого теста: 29 мая 2020 года.

  1. Если я запущу свое приложение сейчас, файл 2020-05-29.log будет создан в папке LOG.

    .
    ├── ...
    ├── LOG
    │   └── 2020-05-29.log
    └── ...

Если я запустил свое приложение через минуту, указанный выше файл будет заархивирован во вновь созданную подпапку OLD_LOGS, а новый файл будет создан в папке LOG.
   .
   ├── ...
   ├── LOG
   │   ├── 2020-05-29.log
   │   ├── OLD_LOGS
   │      └── 2020-05-29.log
   └── ...
Если я переведу часы на следующий день (30 мая 2020 г.), будет создан новый файл 2020-05-30.log
   .
   ├── ...
   ├── LOG
   │   ├── 2020-05-29.log
   │   ├── 2020-05-30.log
   │   ├── OLD_LOGS
   │      └── 2020-05-29.log
   └── ...
Если я запустил приложение через минуту, файл 2020-05-30.log будет заархивирован
  .
  ├── ...
  ├── LOG
  │   ├── 2020-05-29.log
  │   ├── 2020-05-30.log
  │   ├── OLD_LOGS
  │      ├── 2020-05-29.log
  │      └── 2020-05-30.log
  └── ...

Разве файл LOG/2020-05-29.log не был заархивирован?

1 Ответ

0 голосов
/ 30 мая 2020

В вашей конфигурации есть проблема с поминутным архивированием.

NLog начинает заменять старый файл, потому что ваш формат файла - yyyy-MM-DD. Правильная конфигурация для достижения поминутного уровня, добавьте код ниже.

    <target name="kFile" xsi:type="File"
        layout="${longdate} ${logger} ${message}${exception:format=ToString}"
        fileName="${basedir}/LOG/${date:format=yyyy-MM-dd}.log"
        archiveFileName="${basedir}/LOG/OLD_LOGS/{#}.log"
        archiveDateFormat="yyyy-MM-dd-mm"
        archiveNumbering="Date"
        archiveEvery="Minute"
  />

Формат изменен на yyyy-MM-dd-mm.

Это изменение создано ниже файлов в моей папке

  .
├── ...
├── LOG
│   ├── 2020-05-30.log
│   ├── OLD_LOGS
│      ├── 2020-05-30-01.log
│      └── 2020-05-30-02.log
└── ...

enter image description here

Я проверил с той же конфигурацией, что и ваша, и результат был enter image description here

Таким образом, функция архивирования NLog не работает так, как вы этого хотите. Он просто помещает последний файл месяца в папку архива, а не все.

Итак, вы должны настроить NLog для архивирования файлов каждый день и установить максимальное количество файлов примерно на 365, чтобы хранить их в течение одного года. Примените следующую конфигурацию:

    <target name="kFile" xsi:type="File"
        layout="${longdate} ${logger} ${message}${exception:format=ToString}"
        fileName="${basedir}/LOG/${date:format=yyyy-MM-dd}.log"
        archiveFileName="${basedir}/LOG/OLD_LOGS/{#}.log"
        archiveDateFormat="yyyy-MM-dd"
        archiveNumbering="Date"
        archiveEvery="Day"
        maxArchiveFiles="365"
  />

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...