2010-08-11 2 views
9

В настоящее время у нас есть NLog, выплевывающие CSV-файлы, чтобы доказать, что NLog фактически регистрирует исключения.Настройка NLog для исключения журналов в XML-выходном файле?

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" internalLogToConsole="true" internalLogToConsoleError="true"> 
<targets> 
    <target name="file" xsi:type="File" fileName="${specialfolder:folder=ApplicationData}/log.csv"> 
    <layout xsi:type="CSVLayout"> 
     <column name="User_Machine_Name" layout="${machinename}" /> 
     <column name="Time" layout="${date}" /> 
     <column name="Level" layout="${level}" /> 
     <column name="Message" layout="${message}" /> 
     <column name="Exception_Message" layout="${exception:format=Message}"/> 
     <column name="Exception_Type" layout="${exception:format=Type}"/> 
     <column name="Callsite_Class" layout="${callsite:methodName=false}" /> 
     <column name="Callsite_Method" layout="${callsite:className=false}" /> 
     <column name="Stack_Trace" layout="${stacktrace:format=DetailedFlat}"/> 
    </layout> 
    </target> 
    <target name="console" xsi:type="Console" 
    layout="${longdate}|${level}|${message}"> 
    </target> 
</targets> 
<rules> 
    <logger name="*" minlevel="Trace" writeTo="file" /> 
</rules> 

Это работает, как ожидается, за исключением того, что мне это нужно для вывода в XML. Я просмотрел документацию NLog, и единственное, что я нашел, это то, что есть файл Log4JXmlEventLayout, но в документации не говорится о том, как его использовать. Я новичок в NLog, и я не могу найти слишком много ресурсов по этому вопросу.

ответ

9

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

Возможная конфигурация выглядит следующим образом:

<target name ="xmlFile" xsi:type="File" 
       fileName="${tempdir}/${processname}/log.xml" 
       archiveFileName="${tempdir}/${processname}/archive/log_{#####}.xml" 
       archiveAboveSize="10000000" 
       layout="${log4jxmlevent:includeSourceInfo=true:includeCallSite=true:includeMDC=true:appInfo=true:includeNDC=true:includeNLogData=true}"/> 

Однако, я обнаружил, что только NLog 2,0 будет на самом деле использовать атрибуты, как «includeSourceInfo». Мне показалось, что в NLog 1.0, когда они были установлены в true, в результате xml содержал только дату, уровень и сообщение.

Одной из причин не использовать Log4JXmlEventLayout в том, что он ничего с исключениями, то есть не делать, если вы звоните

logger.ErrorException("This shouldn't happen", exception); 

регистратор запишет «Это не должно случиться», но информация исключение прошло.

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