Hay dos avances fundamentales con el enfoque estructurado que no se pueden emular usando registros de texto sin (a veces niveles extremos) de esfuerzo adicional.
Tipos de eventos
Cuando escribe 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");
Estos producirán 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 automático, 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 eventos like 'Disk quota%'
se reducirá tan pronto como ocurra otro evento con el siguiente aspecto:
Disk quota 100 set for user DTI-Matt
El registro de texto desecha la información que inicialmente tenemos sobre el origen del evento, y esto debe reconstruirse al leer los registros, generalmente con expresiones de coincidencia cada vez 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 de log4net, pero detrás de escena, ambos eventos llevan la "Disk quota {Quota} exceeded by user {Username}"
plantilla de mensaje .
Con un receptor apropiado, más tarde puede escribir consultas where MessageTemplate = 'Disk quota {Quota} exceeded by user {Username}'
y obtener exactamente los eventos donde se superó la cuota de disco.
No siempre es conveniente almacenar la plantilla de mensaje completa con cada evento de registro, por lo que algunos hunden la plantilla de mensaje en un EventType
valor numérico (por ejemplo 0x1234abcd
), o puede agregar un enriquecedor a la canalización de registro para hacerlo usted mismo .
Es más sutil que la siguiente diferencia a continuación, pero es enormemente poderosa cuando se trata de grandes volúmenes de registro.
Datos estructurados
Una vez más, 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 like 'Disk quota' and like 'DTI-Matt'
.
Pero, el diagnóstico de producción no siempre es tan sencillo. ¿Imagina que es necesario encontrar eventos donde la cuota de disco excedida fuera inferior a 125 MB?
Con Serilog, esto es posible en la mayoría de los sumideros utilizando una variante de:
Quota < 125
La construcción de este tipo de consulta a partir de una expresión regular es posible, pero se cansa rápido y por lo general termina siendo una medida de último recurso.
Ahora agregue a esto un tipo de evento:
Quota < 125 and EventType = 0x1234abcd
Aquí comienza a ver cómo estas capacidades se combinan de manera directa para hacer que la depuración de producción con registros se sienta como una actividad de desarrollo de primera clase.
Un beneficio adicional, quizás no tan fácil de prevenir por adelantado, pero una vez que la depuración de producción se ha eliminado de la tierra de la piratería de expresiones regulares, los desarrolladores comienzan a valorar mucho más los registros y a tener más cuidado y consideración al escribirlos. Mejores registros -> aplicaciones de mejor calidad -> más felicidad por todas partes.