es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema al migrar de PatternLayout a JsonTemplateLayout, los valores nulos o vacíos de MDC no aparecen en el registro.

Tengo el archivo log4j2-spirng.xml con este patrón de diseño:

<patternlayout alwayswriteexceptions="false" pattern="{..." "userid":"%x{userid}"="" ...}=""></patternlayout>

userId es un valor de MDC. En caso de que sea nulo, se registra con un valor en blanco de esta manera:

..., "userId": "", ...

Ahora estoy intentando mover todos los campos del diseño de patrón a una plantilla Json utilizando JsonTemplateLayout.

En la plantilla de registro, estoy tratando de construir el mismo mensaje de registro. La marca de tiempo y otros campos están bien, sin problemas allí. El único problema son los valores de MDC. Cuando los valores están presentes, se registran correctamente, pero cuando no lo están, el campo se ignora y no se incluye en el registro. Leo los valores de MDC de esta manera:

...
"userId": {
  "$resolver": "mdc",
  "key": "userId"
},
...

¿Debo aplicar algún formato y colocar este “%X” en algún lugar o cómo funciona? Necesito obtener el mismo registro que con el diseño de patrón, con todos los campos y, si los campos no están presentes en MDC o son nulos o están vacíos, aún así se deben incluir en el registro pero con un valor de cadena vacía.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para incluir el campo userId en el registro incluso cuando sea nulo o vacío en MDC, puede utilizar la siguiente configuración en su plantilla de registro:

    ...
      "userId": {
        "$resolver": "mdc",
        "key": "userId",
        "default": ""
      },
    ...
    

    La propiedad “default” especifica el valor a utilizar si la clave MDC no está configurada o el valor es nulo. En este caso, se establece como una cadena vacía, lo que resultará en el mismo formato de registro que en el diseño de patrón. No es necesario aplicar formato como “%X” al utilizar JsonTemplateLayout.

Comments are closed.