Domanda

Attualmente, abbiamo NLog sputare file CSV solo per dimostrare che abbiamo NLog eccezioni in realtà di registrazione.

<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>

Questo funziona come previsto, tranne che ho bisogno di output in formato XML. Ho guardato attraverso la documentazione NLog e l'unica cosa che ho trovato è che c'è una Log4JXmlEventLayout ma la documentazione non va in come usarlo. Sono nuovo di NLog e non riesco a trovare troppe risorse sul tema.

È stato utile?

Soluzione

Per quanto posso dire, il Log4JXmlEventLayout ha alcune proprietà ad esso associati (stack informazioni di traccia-ish, classe chiamata, tempo, ecc), ma che su di esso. Ho guardato in modo da includere informazioni aggiuntive, ma sembra come se questo non è possibile.

A sguardi possibili configurazione come questa:

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

Tuttavia, ho trovato che solo NLog 2.0 sarà effettivamente fare uso di attributi come "includeSourceInfo". Mi sembrava che in NLog 1.0, quando questi sono stati impostati su true, il codice XML risultante conteneva solo la data, il livello, e il messaggio.

Una ragione per non utilizzare Log4JXmlEventLayout è che non fa nulla con le eccezioni, vale a dire se si chiama

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

il registratore annoterà "Questo non dovrebbe accadere", ma le informazioni eccezione è andato.

Forse sarebbe possibile creare un wrapper XML personalizzato attorno ai dati che si desidera. Non ho fatto così, ma io sto pensando solo a causa delle limitazioni di tutto il Log4JXmlEventLayout.

Altri suggerimenti

Dal NLog 4.6 c'è un layout XML. Con il layout si potrebbe definire il proprio XML. Per es.

<target name="xmlFile" xsi:type="File" fileName="${logFileNamePrefix}.xml" >
      <layout xsi:type="XmlLayout" includeAllProperties="false" elementName='logevent'>
              <attribute name="time" layout="${longdate}" />
              <attribute name="level" layout="${level:upperCase=true}"/>
              <element name="message" value="${message}" />
      </layout>
</target>

avrebbe scritto:

<logevent time="2010-01-01 12:34:56.0000" level="ERROR">
   <message>hello, world</message>
</logevent>

docs

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top