Hay dos avances fundamentales con el enfoque estructurado que no se pueden emular utilizando registros de texto sin (a veces niveles extremos) un esfuerzo adicional.
Tipos de eventos
Cuando escribes dos eventos con log4net como:
log.Debug("Disk quota {0} exceeded by user {1}", 100, "DTI-Matt");
log.Debug("Disk quota {0} exceeded by user {1}", 150, "nblumhardt");
Esto producirá un texto similar:
Disk quota 100 exceeded by user DTI-Matt
Disk quota 150 exceeded by user nblumhardt
Pero, en lo que respecta al procesamiento de la máquina, son solo dos líneas de texto diferente.
Es posible que desee encontrar todos los eventos de "cuota de disco excedida", pero el caso simplista de buscar los eventos like 'Disk quota%'
caerá tan pronto como ocurra otro evento como este:
Disk quota 100 set for user DTI-Matt
El registro de texto desecha la información que tenemos inicialmente sobre la fuente del evento, y esto debe reconstruirse al leer los registros, generalmente con expresiones de coincidencia más y más elaboradas.
Por el contrario, cuando escribe los siguientes dos eventos Serilog :
log.Debug("Disk quota {Quota} exceeded by user {Username}", 100, "DTI-Matt");
log.Debug("Disk quota {Quota} exceeded by user {Username}", 150, "nblumhardt");
Estos producen una salida de texto similar a la versión log4net, pero detrás de las escenas, ambos eventos llevan la "Disk quota {Quota} exceeded by user {Username}"
plantilla de mensaje .
Con un receptor apropiado, más tarde puede escribir las consultas where MessageTemplate = 'Disk quota {Quota} exceeded by user {Username}'
y obtener exactamente los eventos donde se excedió la cuota de disco.
No siempre es conveniente almacenar la plantilla de mensaje completa con cada evento de registro, por lo que algunos de ellos descartan la plantilla de mensaje en un valor numérico EventType
(por ejemplo, 0x1234abcd
), o puede agregar un enricher a la tubería de registro a hazlo tú mismo .
Es más sutil que la siguiente diferencia a continuación, pero una poderosa a la hora de manejar grandes volúmenes de registro.
Datos estructurados
Nuevamente, considerando los dos eventos sobre el uso del espacio en disco, puede ser bastante fácil usar registros de texto para consultar a un usuario en particular con like 'Disk quota' and like 'DTI-Matt'
.
Pero, los diagnósticos de producción no siempre son tan sencillos. ¿Imagina que es necesario encontrar eventos en los que la cuota de disco excedida sea inferior a 125 MB?
Con Serilog, esto es posible en la mayoría de los sumideros utilizando una variante de:
Quota < 125
Es posible construir este tipo de consulta a partir de una expresión regular , pero se cansa rápidamente y generalmente termina siendo una medida de último recurso.
Ahora agregue a esto un tipo de evento:
Quota < 125 and EventType = 0x1234abcd
Usted comienza a ver aquí cómo estas capacidades se combinan de una manera directa para hacer que la depuración de la producción con los registros se sienta como una actividad de desarrollo de primera clase.
Otro beneficio, tal vez no es tan fácil de prevenir por adelantado, pero una vez que la depuración de la producción se ha retirado de la tierra de la piratería de expresiones regulares, los desarrolladores comienzan a valorar los registros mucho más y a tener más cuidado y consideración al escribirlos. Mejores registros - > aplicaciones de mejor calidad - > más felicidad por todos lados.