2012-02-21 27 views
5

Si una dependencia de terceros inicia sesión utilizando un marco concreto (como log4j), y quiero que mi aplicación haga todo el registro mediante slf4j, entonces es posible configurar log4j (en XML, archivo de propiedades, etc.) para redirigir los mensajes de registro a la API slf4j? (Que, en tiempo de ejecución, se uniría a un enlace concreto slf4j de mi elección.)Redireccionar log4j a slf4j

Sería agradable que todos los mensajes de registro vayan al mismo lugar a través de la misma API.

Ni siquiera importa si tengo que hacer algo un poco loco, como log4j.properties apuntan a un código intermedio (que me gustaría escribir), que a su vez dirige el tráfico a SLF4J!

Simplemente no sé por dónde empezar. ¡Gracias por adelantado!

Respuesta

4

Por supuesto que puede y se explica a fondo en el documentation:

log4j-over-slf4j

nave SLF4J con un módulo llamado log4j-over-slf4j. Permite a los usuarios de log4j migrar aplicaciones existentes a SLF4J sin cambiar una sola línea de código, sino simplemente reemplazando el archivo log4j.jar con log4j-over-slf4j.jar, como se describe a continuación.

Es a la vez hacky e ingenioso - va a quitar log4j.jar y su sustitución por log4j-over-slf4j.jar. El último JAR refleja las clases de Log4J en los mismos paquetes, por lo que ni siquiera es necesario volver a compilar la aplicación y las bibliotecas. Pero las nuevas implementaciones simplemente están cambiando a SLF4J.

+0

Ahhh, por lo que un enlace slf4j * vincula slf4j a algún sistema de registro subyacente, pero un puente slf4j * asigna/redirige algún sistema de registro subyacente a slf4j. ¿Es eso una afirmación justa? – IAmYourFaja

+0

@herpylderp: ¡sí! Además, debe tener exactamente un enlace SLF4J pero cualquier cantidad de puentes. –

+1

Advertencia: 'log4j-over-slf4j.jar' es una implementación parcial de la API' log4j', por lo que si su biblioteca utiliza algunas clases no implementadas en el puente, obtendrá los errores de ClassNotFound –

Cuestiones relacionadas