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.

¿Cómo puedo ver el MessageTemplate al usar Serilog WriteTo.Console?

Estoy usando Serilog para la generación de registros y estoy usando el escritor de la Consola para enviar registros a la salida estándar, que luego es recogida por Filebeat y enviada a Elastic. La configuración del generador de registros incluye lo siguiente:

.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{Properties:j}{NewLine}{Exception}")

Todo esto está bien, las propiedades estructuradas se muestran y se representan en formato JSON correctamente. No obstante, falta el valor de la propiedad MessageTemplate, que produciría una salida similar a esta:

"MessageTemplate":"El usuario {Username} se ha conectado satisfactoriamente"

Esto es un problema porque sería muy útil poder realizar búsquedas en Kibana para mostrar el número de veces que los usuarios se han conectado mediante la búsqueda de la plantilla de mensaje en lugar del mensaje representado, que sería específico de un solo usuario, por ejemplo:

"Message":"El usuario "Joe Bloggs" se ha conectado satisfactoriamente"

Veo que puedo usar el objeto JsonFormatter para escribir en la consola de la siguiente manera:

.WriteTo.Console(new JsonFormatter(renderMessage: true))

Al usar este método, se muestran tanto el mensaje como la plantilla de mensaje, pero lo hace de una manera de JSON que es difícil de leer cuando una persona está viendo los registros en la línea de comandos.

¿Alguien sabe si es posible que la plantilla de salida de la Consola de Serilog incluya la plantilla de mensaje?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en c# y Serilog, aquí está mi respuesta a la consulta:

    Es posible incluir la plantilla de mensaje (MessageTemplate) en la plantilla de salida de Serilog Console, lo que mostraría la plantilla de mensaje en lugar del mensaje renderizado. Una forma de lograr esto es modificando la plantilla de salida de Console para incluir la propiedad MessageTemplate.

    Aquí hay un ejemplo de cómo se vería la plantilla de salida modificada en Console:

    .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {MessageTemplate} {Properties:j}{NewLine}{Exception}")

    Al incluir el marcador de posición {MessageTemplate} en la plantilla de salida, se mostrará el valor de la propiedad MessageTemplate junto con otras propiedades estructuradas en formato JSON. Esto le permitiría realizar consultas en Kibana para buscar plantillas de mensajes específicas y realizar análisis sobre ellas.

    Tenga en cuenta que al incluir la plantilla de mensaje en la salida, esto podría resultar en mensajes de registro más largos, por lo que puede ser necesario ajustar la configuración de los registros para acomodarlos.

Comments are closed.