2010-08-11 10 views
9

Actualmente, tenemos NLog escupiendo archivos CSV solo para demostrar que NLog realmente está registrando excepciones.¿Configurando NLog para registrar excepciones en una salida 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> 

esto está funcionando como se esperaba, salvo que lo necesito para dar salida en XML. Revisé la documentación de NLog y lo único que encontré es que hay un Log4JXmlEventLayout, pero la documentación no explica cómo usarlo. Soy nuevo en NLog y no puedo encontrar demasiados recursos sobre el tema.

Respuesta

9

Por lo que puedo decir, el Log4JXmlEventLayout tiene algunas propiedades asociadas (información de seguimiento de la pila, clase de llamadas, tiempo, etc.), pero eso es todo. He analizado cómo incluir información adicional, pero parece que eso no es posible.

Una configuración posible es el siguiente:

<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}"/> 

Sin embargo, he descubierto que sólo Nlog 2.0 en realidad hará uso de atributos como "includeSourceInfo". Me pareció que en NLog 1.0, cuando se establecieron en verdadero, el xml resultante contenía solo la fecha, el nivel y el mensaje.

Una razón para no usar Log4JXmlEventLayout es que no hace nada con excepciones, es decir, si se llama a

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

el registrador anotará "Esto no debería ocurrir", pero la información es una excepción ido.

Quizás sea posible crear un contenedor xml personalizado alrededor de los datos que desee. No lo he hecho, pero estoy pensando en ello simplemente debido a las limitaciones en torno a Log4JXmlEventLayout.

Cuestiones relacionadas