NLog не удаляет старые файлы журнала - PullRequest
0 голосов
/ 10 октября 2018

У меня есть этот конфиг для NLog в моей службе Windows.Требования составляют 1 файл в день и содержат максимум 10 файлов.

  <variable name="logPath" value="D:\infra\project\logs"/>

  <targets>
    <target xsi:type="AsyncWrapper" name="main.fileAsyncWrapper">
      <target xsi:type="RetryingWrapper" name="main.fileRetryWrapper" retryCount="10" retryDelayMilliseconds="1000">
          <target
              xsi:type="File"
              name="main.file"
              layout="${message}"
              fileName="${logPath}\win-service-${date:format=yyyy-MM-dd}.log"
              archiveFileName=" ${logPath}\archive\service-main-{#}.log"
              archiveNumbering="Rolling"
              maxArchiveFiles="10"
              encoding="utf-8"
              keepFileOpen="true"
              openFileCacheTimeout="30"/>
      </target>
    </target>
  </targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="main.fileAsyncWrapper" />
  </rules>

Почему-то старые файлы не удаляются (у меня их 12 в моем каталоге).Архивный каталог даже не создан.Что я сделал не так? В соответствии с документацией , я удалил archiveEvery="Day", он не получил желаемого результата.Но удаление не заставило удаление работать.Я запускаю Windows Server с NLog 4.5.5 и .NET 4.6.1.

1 Ответ

0 голосов
/ 10 октября 2018

Ваша конфигурация не имеет никакого смысла для меня.Думаю, вам нужно объяснить, как вы ожидаете, что ваша конфигурация будет работать.Любая причина, по которой вы не следуете примерам: https://github.com/NLog/NLog/wiki/FileTarget-Archive-Examples

Но поскольку вы настроили ${date:format=yyyy-MM-dd} в FileName и не указали archiveEvery (или archiveAboveSize), он никогда не будет запускать операции архивирования.

Я предлагаю вам настроить свой NLog следующим образом:

      <target
          xsi:type="File"
          name="main.file"
          layout="${message}"
          fileName="${logPath}\service-main.log"
          archiveFileName="${logPath}\archive\service-main-{#}.log"
          archiveNumbering="Rolling"
          archiveEvery="Day"
          maxArchiveFiles="10"
          encoding="utf-8"
          keepFileOpen="true" />

Или настроить свой NLog следующим образом (требуется NLog 4.5 или более поздней версии):

      <target
          xsi:type="File"
          name="main.file"
          layout="${message}"
          fileName="${logPath}\win-service-${date:format=yyyy-MM-dd}.log"
          maxArchiveFiles="10"
          encoding="utf-8"
          keepFileOpen="true" />

Или вынастроить NLog следующим образом (поддерживает NLog 4.4 или более раннюю версию):

      <target
          xsi:type="File"
          name="main.file"
          layout="${message}"
          fileName="${logPath}/win-service-${date:format=yyyy-MM-dd}.log"
          archiveFileName="${logPath}/win-service-{#}.log"
          archiveDateFormat="yyyy-MM-dd"
          archiveNumbering="Date"
          archiveEvery="Year"
          maxArchiveFiles="10"
          encoding="utf-8"
          keepFileOpen="true" />
...