2010-11-12 14 views
106

Estamos usando la combinación de SLF4J + Logback en nuestro proyecto desde hace un tiempo y estamos muy contentos con ella, pero nuestra estrategia de registro es bastante simple, usando loggers simples basados ​​en clases y sin cosas sofisticadas como MDC o Marcadores.Mejores prácticas para usar marcadores en SLF4J/Logback

Lo que quiero saber es si alguien en la comunidad realmente usa estas características y cómo se usan para mejorar el registro/filtrado.

Estoy especialmente interesado en dónde, por qué y cómo se usaría [1] Marcadores para el registro. Me parece una característica muy buena para agregar contexto semántico al registro, por ejemplo, mientras que una clase puede manejar preocupaciones múltiples, uno puede usar marcadores específicos de tarea/preocupación para discriminar declaraciones de registro.

¿Cuáles pueden ser las mejores prácticas, convenciones o estrategias para crear y usar marcadores en el registro?

Actualización: supongo, lo que estoy realmente después no es tanto qué de usar marcadores, sino más bien la cómo parte — hay algunas buenas prácticas de marcadores de nombres (por ejemplo, utilizando texto plano con espacios o nombres de estilo de palabra clave delimitados por guiones/guiones bajos/puntuación), debería haber algún tipo de grupo de "nombres estándar", nombrando cosas en función de las funciones comerciales. Las preguntas que probablemente puede averiguar por mí mismo, pero si quiero usar estas características de forma sistemática e introducirlos en un equipo de desarrolladores, que tiene sentido tener un conjunto de directrices formalizable alrededor ...


[1] - Al preguntar cómo usar los marcadores Realmente no estoy preguntando cómo usar la API (en realidad es bastante sencillo) - Me refiero más bien al nivel más general de cómo se configuraría el inicio de sesión usando marcadores consistentemente

Respuesta

85

primer lugar, como @darioo dijo:

  • MDC se utiliza para asociar múltiples eventos con unos pocos "entiti es"
  • [Marcadores] se utilizan para 'eventos especiales' que desea se han filtrado de las habituales

lo tanto, su afirmación de que Usted desea utilizar para este MDC. Los marcadores son para resaltar eventos "especiales", filtrando, si se quiere, en lugar de "cortar". Por ejemplo, puede dividir según un usuario en particular, pero filtrar según excepciones inesperadas. En este caso, crearía una dimensión de usuario MDC y una UnexpectedException Marcador.


Pero aparentemente esto no aborda la pregunta que tenía en mente. Usted "se refiere más bien al nivel más general de cómo se configuraría el inicio de sesión utilizando marcadores de forma consistente". Así que vamos a abordar:

MDC es para cortar y rebanar , y marcadores son para filtrar . Estas actividades se llevan a cabo durante las pruebas y en la producción. Como tal, debe decidir qué dimensiones espera que sean útiles para dividir los datos de registro, y en qué casos podría ser útil filtrarlos, cuando se produzca la prueba/producción. Cada dimensión tiene una dimensión MDC. Cada caso tiene un marcador. Es así de simple.

Los desarrolladores no necesitan tomar ninguna decisión aquí. Una sola persona o equipo debería decidir, en el momento del diseño, qué tipo de corte, recorte y filtrado debe ser admitido. Esto debe ser informado imaginando qué tipo de tareas de análisis uno espera que se le pida que realice.

Esta misma persona o equipo debe decidir sobre la convención de nomenclatura. Es completamente arbitrario. Elija algo que sea estéticamente agradable, autodescriptivo (más importante), y lo suficientemente específico como para que no sea probable que entre en conflicto con adiciones posteriores. Los guiones frente a subrayan es excesivamente quisquilloso y alarmante al lado del punto, pero tenga en cuenta que puede ser menos confuso para los empleados de ESL leer guiones bajos (al menos en comparación con CamelCase); al mismo tiempo, esto molesta, según se informa, a algunos desarrolladores debido a la incomodidad de alcanzar las claves requeridas.

En cuanto a la decisión sobre una política, esto solo significa que define en qué casos se necesita emplear una dimensión Marker o MDC determinada. Mantenga esta estrecha (centralizada, deliberada), pero permita la retroalimentación de los desarrolladores si sienten que el conjunto de dimensiones y marcadores son insuficientes para la tarea en cuestión. Revise/agregue dimensiones y/o atributos según corresponda.

Comprenda esta política será casi necesariamente específica del proyecto. No todos los proyectos necesitan el mismo tipo de análisis de registro. Imagina algunos escenarios de pesadilla. Luego imagine cómo le gustaría poder analizar los registros en ese escenario. Probablemente no quiera tener que escribir un script complicado para tratar de rastrear qué mensaje pertenece a qué contexto, y qué estado es cuál en ese momento, ¿no? Codifique la información necesaria como dimensiones y marcadores, y ahórrese algunas molestias si algo sale mal.

+7

Gran respuesta. Yo diría que MDC, que es una estructura de datos basada en subprocesos, también se puede usar para filtrar. – Ceki

+0

Gran respuesta. Pero, ¿qué es un _ESL Employee_? – DerMike

+0

Gracias. Ingles como segundo lenguaje. – user359996

61

Primero, MDC.

MDC es realmente útil en un entorno donde tiene una "entidad" que está asociada con algún comportamiento. Un ejemplo típico: el usuario interactúa con una aplicación web. Entonces, digamos que tiene muchos usuarios jugando con su aplicación web. Al usar MDC, puede rastrearlos fácilmente sin demasiada molestia. Ejemplo simplificado:

...[Sandy][abcd] clicked on "change profile" 
...[Joe][1234] clicked on "weather reports" 
...[Joe][1234] clicked on "Europe" 
...[Sandy][abcd] clicked on "logout" 
...[Joe][1234] clicked on "logout" 
...[Sandy][efgh] logged in 

Aquí está utilizando MDC en dos lugares: para nombre de usuario y para ID de sesión. De esta manera, puede grep fácilmente la sesión de un usuario para ver todo lo que han estado haciendo.

Segundo, marcadores.

Los marcadores se usan generalmente para circunstancias "especiales", como enviar un correo electrónico a un administrador por algunos errores graves. No todos los errores siempre caen en la misma categoría; algunos tienen que ser tratados de una manera apropiada.

O, cuando un usuario abandona su servicio, por lo general va a un registro INFO, pero también puede usar un marcador para esas instancias, si desea que eventos como este vayan en un archivo de registro separado, entonces puede controlarlo más fácilmente para la recopilación estadística de usuarios que dejan de fumar.

Regla de oro:

  • MDC se utiliza para asociar múltiples eventos con algunas "entidades"
  • marcadores se utilizan para eventos "especiales" que desea se han filtrado de las habituales
+2

Esta es una buena respuesta, pero sólo cubre un caso de uso posible para el uso de marcadores. La forma en que veo esto, las características del marco de registro (como MDC y Marcadores) existen para proporcionar más metadatos para cortar y cortar más tarde los registros (como el correo electrónico de administrador o los casos de registro separados que mencionaste). Lo que supongo que busqué fue cómo crear marcadores exactamente (debería haber un "conjunto estándar" de marcadores, hay algunas convenciones de nombres para tener en cuenta, etc.) –

+2

@Roland: He agregado algunos ejemplos, pero no puedo agregar todos los ejemplos ya que son, por definición, ilimitados. Si entiendes la motivación y la razón de los marcadores, entonces su uso está limitado solo por tu imaginación y tu sentido común. – darioo

25

Los marcadores pueden usarse para color o marcar solo extracto de registro. Lo que hagas con estos colores, es decir, marcadores, depende totalmente de ti. Sin embargo, dos patrones parecen ser comunes (el primero más común que el segundo) para el uso del marcador.

  1. Disparo: Algunos appender podría ser instruido para tomar una acción en la presencia de un determinado marcador. Por ejemplo, SMTPAppender se puede configurar para enviar un correo electrónico siempre que un evento de registro esté marcado con el marcador NOTIFY_ADMIN, independientemente del nivel de registro. Consulte marker-based triggering en la documentación de inicio de sesión. También puede combinar niveles de registro y marcadores para desencadenar.

  2. Filtrado: Por ejemplo, podría marcar/marcar todos sus registros relacionados con la persistencia (en varios y varios archivos de clase) con el color "DB". A continuación, puede filtrar para "DB": deshabilitar el registro a excepción de las declaraciones de registro marcadas con DB. Consulte el chapter on filters en la documentación de inicio de sesión para obtener más información (busque MarkerFilter).

6

Así como un apéndice, si está utilizando logstash y ha habilitado el registro JSON, hay otro uso potencial de Marcador - para las variables de registro que se asocian con un mensaje de registro específico. Esto es más consistente y más fácil de analizar que incluirlo en el cuerpo del mensaje. Muy útil, si se adapta a su caso de uso.

Ver detalles aquí:

https://github.com/logstash/logstash-logback-encoder#loggingevent_custom_event

Cuestiones relacionadas