Pregunta usando Nlog y escribiendo en un archivo como json


Creo que me estoy perdiendo algo, ya que parece que no entiendo cómo escribirlo en un archivo de registro en formato json usando la configuración de NLog en el archivo de configuración. El archivo recto funciona bien, pero no el json. El objetivo json solo genera el mensaje (no en json).

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">        
    <targets async="true">
      <target xsi:type="File" name="rollingFile" fileName="${basedir}/logs/${shortdate}.log" archiveFileName="${basedir}/logs/{shortdate}_Archive{###}.log" archiveAboveSize="1000000" archiveNumbering="Sequence" layout="${longdate} ${uppercase:${level}} ${callsite} ${message}" />
      <target xsi:type="File" 
              name="rollingFileJson" 
              fileName="${basedir}/logs/${shortdate}.json" 
              archiveFileName="${basedir}/logs/{shortdate}_Archive{###}.json" 
              archiveAboveSize="1000000" 
              archiveNumbering="Sequence" 
              layout="${json-encode} ${message}">
      </target>

    </targets>
    <rules>
      <logger name="*" minlevel="Trace" writeTo="rollingFile" />
      <logger name="*" minlevel="Trace" writeTo="rollingFileJson" />
    </rules>
  </nlog>

5
2017-11-11 20:33


origen


Respuestas:


A partir del lanzamiento de NLog 4.0.0 es posible utilizar un diseño que represente eventos como documentos JSON estructurados.

Ejemplo tomado de Sitio del proyecto NLog:

<target name="jsonFile" xsi:type="File" fileName="${logFileNamePrefix}.json">
    <layout xsi:type="JsonLayout">
        <attribute name="time" layout="${longdate}" />
        <attribute name="level" layout="${level:upperCase=true}"/>
        <attribute name="message" layout="${message}" />
    </layout>
</target>

Editar: También puedes crearlo en código.

aquí Es el enlace a la parte específica de la documentación.

Y aquí el ejemplo copiado:

var jsonLayout = new JsonLayout
{
    Attributes =
    {
        new JsonAttribute("type", "${exception:format=Type}"),
        new JsonAttribute("message", "${exception:format=Message}"),
        new JsonAttribute("innerException", new JsonLayout
        {

            Attributes =
            {
                new JsonAttribute("type", "${exception:format=:innerFormat=Type:MaxInnerExceptionLevel=1:InnerExceptionSeparator=}"),
                new JsonAttribute("message", "${exception:format=:innerFormat=Message:MaxInnerExceptionLevel=1:InnerExceptionSeparator=}"),
            }
        },
        //don't escape layout
        false)
    }
};

Para obtener más información, lea el documentos.


8
2017-07-13 11:54



Según Documentación de NLog: json-codificar podría sólo salida de escape de otro diseño utilizando reglas JSON. No "convertirá" la salida a JSON. Tendrás que hacer eso tú mismo.

'{ "date":"${longdate}","level":"${level}","message":${message}}'

Echa un vistazo a esta pregunta para más detalles.


2
2017-11-12 08:40