Библиотеки платформы NLog уже входят в дистрибутив приложения Ultima Businessware® и в дополнительной установке не нуждаются.

Настройка журналирования осуществляется для каждого из приложений в отдельности в файле его конфигурации. Однако, для корректного журналирования платформой NLog необходимо в тех же файлах конфигурации также сконфигурировать и Serilog, чьи настройки выделены тегом appSettings. В приведенном примере Serilog пишет логи в NLog и базу MongoDB:

<appSettings>

  <add key="serilog:minimum-level" value="Verbose" />

  <add key="serilog:enrich:with-property:ProjectName" value="ProjectName" />

  <add key="serilog:using:NLog" value="Serilog.Sinks.NLog" />

  <add key="serilog:using:Mongo" value="Serilog.Sinks.MongoDB" />

  <add key="serilog:write-to:NLog.restrictedToMinimumLevel" value="Verbose" />

  <add key="serilog:write-to:MongoDB.databaseUrl"

    value="mongodb://serilog:serilog@192.168.102.14:27017/logs" />

</appSettings>

Подробно информацию по настройке NLog можно найти на сайте платформы link nlog-project.org. Ниже приведены лишь несколько типовых примеров конфигурации.

Настройка журналирования NLog для сервера приложений (ConsoleServer.exe.config). Реализован вывод логов в консоль и файлы. Для некоторых быстрорастущих файлов логов настроено архивирование с перезаписью (архивируется после 100 Мб, хранится 10 последних архивов, нумерация файлов по счетчику):

<nlog autoReload="true" xmlns="http://www.nlog-project.org/schemas/NLog.xsd"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<targets>

  <target name="Console" xsi:type="ColoredConsole"

    layout="${pad:inner=${level}:padding=1:fixedLength=true}:${date:format=HH\:mm\:ss}

    ${logger}: ${message}${onexception:inner=${newline}

    ${exception:format=Message:maxInnerExceptionLevel=10:innerFormat=Message}}">

    <highlight-row backgroundColor="NoChange"

      condition="level == LogLevel.Info" foregroundColor="Gray"/>

  </target>

  <target name="TasksLog" xsi:type="File" fileName="${basedir}/TasksScheduler.log"

    layout="${date:format=yyyy\.MM\.dd\ HH\:mm\:ss} ${logger}: ${message}

      ${onexception:inner=${exception}}"/>

  <target name="ServerLog" xsi:type="File" fileName="${basedir}/ConsoleServer.log"

    layout="${date:format=yyyy\.MM\.dd\ HH\:mm\:ss} ${logger}: ${message}

    ${onexception:inner=${newline}

      ${exception:format=tostring:maxInnerExceptionLevel=10}"

    maxArchiveFiles="10" archiveNumbering="Sequence" archiveAboveSize="100000000"

    archiveFileName="${basedir}/ConsoleServer.Archive{####}.log" />

  <target name="ExceptionLog" xsi:type="File" fileName="${basedir}/Exceptions.log"

      layout="${newline}${date:format=yyyy\.MM\.dd\ HH\:mm\:ss}:

      ${exception:format=tostring,data:inner=tostring,data:maxInnerExceptionLevel=10}"

      maxArchiveFiles="10" archiveNumbering="Sequence" archiveAboveSize="100000000"

      archiveFileName="${basedir}/Exceptions.Archive{####}.log" />

  <target name="SqlLog" xsi:type="File" fileName="${basedir}/SqlStatements.log"

      layout="${newline}${date:format=yyyy\.MM\.dd\ HH\:mm\:ss}: ${message}"

      maxArchiveFiles="10" archiveNumbering="Sequence" archiveAboveSize="100000000"

      archiveFileName="${basedir}/SqlStatements.Archive{####}.log" />

  <target name="ServerCallLog" xsi:type="File" fileName="${basedir}/ServerCalls.log"

      layout="${date:format=yyyy\.MM\.dd\ HH\:mm\:ss}: ${message}"

      maxArchiveFiles="10" archiveNumbering="Sequence" archiveAboveSize="100000000"

      archiveFileName="${basedir}/ServerCalls.Archive{####}.log" />

</targets>

<rules>

  <logger name="*" minlevel="Info" writeTo="Console"/>

  <logger name="*" minlevel="Debug" writeTo="ServerLog"/>

  <logger name="TasksScheduler" minlevel="Info" writeTo="TasksLog"/>

  <logger name="FirstChanceException" minlevel="Trace" writeTo="ExceptionLog"/>

  <logger name="Sql" minlevel="Trace" writeTo="SqlLog"/>

  <logger name="ServerCallTracker" minlevel="Trace" writeTo="ServerCallLog"/>

</rules>

</nlog>

Настройка журналирования NLog для приложения PrintWorker (PrintWorkerApp.exe.config) сервера печати. Реализована запись в один файл несколькими процессами (PID):

<nlog autoReload="true" xmlns="http://www.nlog-project.org/schemas/NLog.xsd"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <targets>

    <target name="Console" xsi:type="ColoredConsole"

      layout="${pad:inner=${level}:padding=1:fixedLength=true}:${date:format=HH\:mm\:ss}

      ${logger}: ${message}${onexception:inner=${newline}

      ${exception:format=Message:maxInnerExceptionLevel=10:innerFormat=Message}}">

      <highlight-row backgroundColor="NoChange"

        condition="level == LogLevel.Info" foregroundColor="Gray"/>

    </target>

    <target name="Log"  xsi:type="File" fileName="${basedir}/PrintWorkerApp.log"

      layout="${date:format=yyyy\.MM\.dd\ HH\:mm\:ss} PID=${processid}: ${logger}:

      ${message}${onexception:inner=${newline}

      ${exception:format=tostring:maxInnerExceptionLevel=10}}" autoFlush="true" />

  </targets>

  <rules>

    <logger name="*" minlevel="Info" writeTo="Console"/>

    <logger name="*" minlevel="Debug" writeTo="Log"/>

  </rules>

</nlog>