Как настроить maxArchiveDays в NLog FileTarget с помощью переменной конфигурации

#xml #nlog

#xml #nlog

Вопрос:

у меня есть переменная int в NLog.config <variable name="logLifetime2" value="5"/> , но когда я использую ее в maxArchiveDays="${logLifetime2}" , у меня возникает ошибка. maxArchiveDays видит мою переменную как строку.

 <variable name="logLifetime2"  value="5"/>
<targets>
     <target name="Global" xsi:type="File"
              fileName="Logs/GlobalLog.txt"
              archiveNumbering="Date"
              enableArchiveFileCompression="true"
              archiveFileName="Archive/IPSlog.{#}.zip"
              archiveDateFormat="yyyy-MM-dd"
              maxArchiveDays="${logLifetime2}"
              archiveEvery="Day" />
</targets>
  

Как создать в NLog.Config переменную int?

введите описание изображения здесь

Комментарии:

1. Можете ли вы показать все содержимое вашего NLog.config? Какую версию NLog вы используете? При использовании NLog-config-variables внутри NLog.config они действуют как дословная копия и будут просто работать.

2. <variable name="logLifetime2" value="5"/> <targets> <target name="Global" xsi:type="File" fileName="Logs/GlobalLog.txt" archiveNumbering="Date" enableArchiveFileCompression="true" archiveFileName="Archive/IPSlog.{#}.zip" archiveDateFormat="yyyy-MM-dd" maxArchiveDays="${logLifetime2}" archiveEvery="Day" /> я использую последний пакет nlog nugget. я не могу отправить все Nlog.config, потому что есть ограничение по символу

3. Когда другие публикуют комментарии о недостающих деталях в вашем вопросе. Тогда лучше просто отредактировать свой вопрос и включить в вопрос недостающие детали.

Ответ №1:

При использовании этой конфигурации:

 <?xml version="1.0" encoding="utf-8" ?>
<nlog throwConfigExceptions="true" internalLogFile="${basedir}/Logs/nlog-internal.txt" internalLogLevel="Debug" >

  <variable name="logLifetime2"  value="5"/>

  <targets>
    <target name="Global" type="File"
       fileName="Logs/GlobalLog.txt"
       archiveNumbering="Date"
       enableArchiveFileCompression="true"
       archiveFileName="Archive/IPSlog.{#}.zip"
       archiveDateFormat="yyyy-MM-dd"
       maxArchiveDays="${logLifetime2}"
       archiveEvery="Day" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="Global" />
  </rules>
</nlog>
  

Затем мой nlog-internal.txt содержит это:

 2020-11-12 16:01:58.1235 Debug Setting 'NLog.Targets.FileTarget.maxArchiveDays' to '5'
  

Так что это работает на моей машине. Обязательно используйте версию NLog, в которой поддерживается maxArchiveDays (введена в NLog 4.7)

Но я думаю, вам придется смириться с любыми ошибками, возникающими при проверке XML-схемы (XSD), поскольку переменные NLog-Config очень особенные.

Комментарии:

1. у меня проблема с intellisense для Nlog.config. этот пример действительно работает

2. @ИванОнищенко Ах, так что ваша проблема была с проверкой XML-схемы. Мой пример не включает проверку XSD, поэтому ошибок нет. Не забудьте обновить свой файл NLog.xsd при обновлении NLog. Смотрите также: nuget.org/packages/NLog . Схема