¿Qué son los marcadores en los marcos de Java Logging y cuál es una razón para usarlos?

110

Primera vez que escucho sobre marcadores cuando leí:

http://slf4j.org/faq.html

Verifico los métodos disponibles para el objeto Logger :

e interfaces encontradas:

Más información detallada que obtengo de:

pero aún confuso ... Tenga en cuenta que pregunto por qué , no cómo usarlos, por lo que esto no es un duplicado de:

ACTUALIZACIÓN Parece que cuando usa marcadores, también necesita escribir código Java personalizado en lugar de realizar la configuración en archivos XML o .property ...

ACTUALIZACIÓN 2 De http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator

Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN");
logger.error(notifyAdmin,
  "This is a serious an error requiring the admin's attention",
   new Exception("Just testing"));
Gavenkoa
fuente
Para utilizar marcadores, debe utilizar la API de marcadores proporcionada por SLF4J. ¿Es eso lo que quiere decir con "código Java personalizado"?
Ceki
@Ceki Parece que usar solo Logger.warn (Marker, msg) no le dio ningún beneficio hasta que escribió una clase personalizada para los filtros y los registró ... La sintaxis simple de logback.xml no tiene habilidades especiales para trabajar con Marker (solo imprimirlos por marcador de% )
gavenkoa
1
¿Qué encuentro "especial" en lo que se presenta en logback.qos.ch/manual/appenders.html#OnMarkerEvaluator ?
Ceki
@Ceki ¡Gracias por el punto! ¿Es solo un lugar donde se pueden usar marcadores?
gavenkoa
1
@Ceki Ahora que estamos usando Elasticsearch, es la forma de marcar eventos especiales. Mantenemos marcadores predefinidos en una clase dedicada para su reutilización. No era obvio cuando solo grepusabas registros de texto.
gavenkoa

Respuestas:

117

Esta es una versión repetida de mi respuesta a la pregunta " Mejores prácticas para usar marcadores en SLF4J / Logback ".

Los marcadores se pueden utilizar para colorear o marcar una sola declaración de registro. Lo que hagas con estos colores, es decir, marcadores, depende totalmente de ti. Sin embargo, dos patrones parecen ser comunes para el uso de marcadores.

  1. Activación : se podría indicar a algún aplicador que realice una acción en presencia de un determinado marcador. Por ejemplo, SMTPAppenderse puede configurar para enviar un correo electrónico siempre que se marque un evento de registro con el NOTIFY_ADMINmarcador independientemente del nivel de registro. Consulte la activación basada en marcadores en la documentación de logback. También puede combinar niveles de registro y marcadores para la activación.

  2. Filtrado : los marcadores son muy útiles para destacar ciertas declaraciones de registro valiosas. Por ejemplo, puede colorear / marcar todos sus registros relacionados con la persistencia (en varios archivos de clases múltiples) con el color "DB". A continuación, podría filtrar por "DB": deshabilite el registro excepto para las declaraciones de registro marcadas con DB. Consulte el capítulo sobre filtros en la documentación de logback para obtener más información (busque MarkerFilter). Tenga en cuenta que el filtrado de marcadores se puede realizar no solo mediante logback, sino también con herramientas de análisis de registros.

Antes de la llegada de los marcadores, para lograr un comportamiento similar, tenía la opción 1) usar niveles personalizados 2) usar nombres de registradores modificados. La API de SLF4J actualmente no admite niveles personalizados. En cuanto a la opción 2, es posible agregar sufijos (o prefijos) a los nombres de los registradores si es necesario modificar uno o dos registradores. El enfoque se vuelve impráctico tan pronto como sea necesario "subclasificar" 3 o más registradores porque los archivos de configuración asociados se vuelven inmanejables.

Aunque un solo marcador ya puede ser muy útil, la próxima versión de SLF4J, es decir, la versión 2.0, permitirá múltiples marcadores por declaración de registro.

Ceki
fuente
1
También se puede utilizar en SiftingAppender para discriminador stackoverflow.com/a/30552012/1012497
nikli