Можно ли использовать макет рендеринга для FileName? - PullRequest
0 голосов
/ 21 февраля 2020

Можно ли использовать макет (ы) (точнее имя процесса) для FileName (ов)?

Примечание,

internalLogFile (и значение INTERNAL.log)

и

fileName="${processname}.NLog.${shortdate}.PeanutButter.log"

значения ниже.

<?xml version="1.0" encoding="utf-8" ?>
<!-- XSD manual extracted from package NLog.Schema: https://www.nuget.org/packages/NLog.Schema-->
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogFile="${processname}.NLog.INTERNAL.log"
      internalLogLevel="Trace" >

  <!-- the targets to write to -->
  <targets>
    <!-- write logs to file -->
    <target xsi:type="File" name="target1" fileName="${processname}.NLog.${shortdate}.PeanutButter.log"
            layout="${date}|${level:uppercase=true}|${logger}|${environment-user:userName=true:domain=true}|****|${message} ${exception:format=toString,Data}|${all-event-properties}" />
    <target xsi:type="Console" name="target2"
            layout="${date}|${level:uppercase=true}|${logger}|${message} ${exception:format=toString,Data}|${all-event-properties}" />
  </targets>




  <!-- rules to map from logger name to target -->
  <rules>
    <logger name="*" minlevel="Trace" writeTo="target1,target2" />
  </rules>
</nlog>

С учетом вышеизложенного я получаю файл, созданный:

$ {имя процесса } .NLog.INTERNAL.log

(буквально, это имя файла)

и ни одного файла с именем:

* PeanutButter.log

где * - поиск по шаблону.

Импортированные пакеты ниже.

  <ItemGroup>
    <PackageReference Include="NLog" Version="4.6.8" />
    <PackageReference Include="NLog.Extensions.Logging" Version="1.6.1" />
  </ItemGroup>

1 Ответ

1 голос
/ 21 февраля 2020

Можно ли использовать макет (ы) (точнее имя процесса) для FileName (ов)?

Filetarget

Да, он полностью поддерживается для файла target.

См. этот простой пример из Filetarget docs :

Файлы журналов на уровне

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

  • Trace.log
  • Debug.log
  • Info.log
  • Warn.log
  • Error.log
  • Fatal.log

 <target name="file" xsi:type="File"
         layout="${longdate} ${logger} ${message}${exception:format=ToString}" 
         fileName="${basedir}/${level}.log" /> 

Внутренний регистратор

$ {имя процесса} .NLog.INTERNAL.log

(буквально, это имя файла)

Не поддерживается для имя файла внутреннего регистратора!

Из документов Internalloger

internalLogFile

Примечание: поддерживается только несколько макетов, поскольку внутренний журнал должен быть стабильным насколько это возможно.

  • NLog 4.6+: Поддерживаемые средства визуализации (без параметров): ${currentdir}, ${basedir}, ${tempdir}
  • NLog 4.6+: Также поддерживаются переменные среды: например, %appdata%

Если внутренний регистратор выйдет из строя из-за (сложных) средств визуализации компоновки, где он должен регистрировать это тогда? ;)

...