Библиотеки платформы 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 можно найти на сайте платформы 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> |