Наличие регистраторов NLog с другой конфигурацией - PullRequest
19 голосов
/ 17 июля 2011

В NLog возможно создание нескольких регистраторов с различной конфигурацией?

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

Возможно ли это с NLog? Если нет, существуют ли каркасы, которые это делают?

Ответы [ 2 ]

22 голосов
/ 19 июля 2011

Да, вы можете сделать это. Вы можете настроить регистратор для этого типа для входа в конкретную цель. Или вы можете настроить регистратор для этого типа для регистрации цели (например, файла), называя файл (автоматически) на основе имени регистратора.

См. документацию по файлу конфигурации *1003* здесь для некоторых примеров.

Кроме того, см. Мой пост здесь с некоторыми советами по файлу конфигурации.

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

<nlog>
  <targets> 
    <target name="f1" xsi:type="File" fileName="${logger}.txt" />
    <target name="f2" xsi:type="File" fileName="${shortdate}.txt" />
  </targets>
  <rules>
    <logger name="Name.Space.Class1" minlevel="Trace" writeTo="f1" />  
    <logger name="*" levels="Debug" writeTo="f2" />
  </rules>
</nlog>

Если вы хотите, чтобы журналы типа Name.Space.Class1 переходили в «специальный» файл (т. Е. Тот, чье имя определяется регистратором), то вы можете добавить «final» в спецификацию регистратора следующим образом:

<logger name="Name.Space.Class1" minlevel="Trace"final="true" />
0 голосов
/ 20 июня 2018

Мой полный пример NLog.config

<?xml version="1.0"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="false" internalLogFile="\\YOURSERVNAME\Logs\nlog-internal.log" internalLogLevel="Warn">
  <variable name="basedir" value="${basedir}/Logs"></variable>
  <targets>
    <default-target-parameters xsi:type="File" fileName="${var:basedir}/Trace.csv" archiveFileName="${var:basedir}/Archives/Trace/Trace.{##}.csv" archiveNumbering="DateAndSequence" archiveDateFormat="yyyy-MM-dd" archiveEvery="Month" maxArchiveFiles="15" archiveAboveSize="10485760" keepFileOpen="false"/>
    <default-wrapper xsi:type="BufferingWrapper" bufferSize="500" flushTimeout="10000" />
    <target name="TraceLog" xsi:type="File">
      <layout xsi:type="CsvLayout" delimiter="Semicolon">
        <column name="Time" layout="${longdate}" />
        <column name="Callsite" layout="${callsite}" />
        <column name="Level" layout="${level}" />
        <column name="User" layout="${Identity}" />
        <column name="Message" layout="${message}" />
      </layout>
    </target>
    <target name="ErrorLog" xsi:type="File" fileName="${var:basedir}/Errors.csv"  archiveFileName="${var:basedir}/Archives/Errors/Errors.{##}.csv" maxArchiveFiles="10">
      <layout xsi:type="CsvLayout" delimiter="Semicolon">
        <column name="Time" layout="${longdate}" />
        <column name="Callsite" layout="${callsite}" />
        <column name="Level" layout="${level}" />
        <column name="User" layout="${Identity}" />
        <column name="Message" layout="${message}" />
      </layout>
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="TraceLog" />
    <logger name="*" minlevel="Error" writeTo="ErrorLog" />
  </rules>
</nlog>
...