Registro utilizando SL4J, registro de Jakarta Commons, log4j para bibliotecas de terceros y mi propio código

StackOverflow https://stackoverflow.com/questions/462566

Pregunta

Tengo algunas preguntas sobre el registro, más específicamente sobre cómo configurarlo y asegurarme de que funcione.

El proyecto que estoy haciendo utilizará Wicket , Spring y Hibernate . Sé que Wicket e Hibernate usa Simple Logging Facade para Java ( SL4J ) y que Spring está usando el componente de registro de Apache Commons .

¿Coexistirán felices? Pensé que usaría log4j junto con SL4J y el componente de registro de Apache commons , ¿crees que es una buena idea?

¿Puedo configurarlos todos para generar datos de registro en un archivo común? ¿O debería usar archivos separados? ¿O debo almacenar los mensajes de registro en la base de datos? (Prefiero no hacerlo, ya que encuentro grepping, etc. en archivos de texto bastante conveniente).

Para Spring supongo que necesito algún tipo de archivo de configuración para el componente de registro de Apache Commons, ¿dónde lo dirijo para usar log4j?

Cuando configuré estos, supongo que para ver que todo funciona, configuré el nivel de registro en INFO, ya que es bastante seguro de que los tres marcos generan información en ese modo. ¿O hay una forma aún mejor de asegurarse?

Y mi última pregunta. En el proyecto que estoy comenzando, ¿me recomienda que use SL4J para mis propios fines de registro? (Pensé que usaría log4j directamente, pero eso fue antes de aprender un poco más sobre el registro y muchas bibliotecas respetables parecen elegir el camino de un puente / fachada para sus necesidades de registro. Y si nos da flexibilidad sin agregar costo no hay razón para no hacerlo de esa manera.)

Espero escuchar más de usted acerca de cómo está haciendo su registro. Es un área nueva para mí en la que estoy ansioso por mejorar.

¿Fue útil?

Solución

Bueno, SLF4J es solo una fachada, como el registro común, lo que significa que todavía necesitan algo más para funcionar. Permiten a los autores de bibliotecas no obligar a los usuarios a tener múltiples bibliotecas de registros y configuraciones. Log4j y logback son bibliotecas de registro normales.

Consulte aquí para obtener más información.

SLF4J tiene un commons logging bridge que puede usar para reemplazar la biblioteca de registro de commons. Creo que el esquema allí explica muy bien la situación.

Ahora, solo necesita usar slf4j-logj12.jar para tener un registro de commons y slf4j usar log4j (o cualquier otra cosa que elija; por cierto, logback no necesita una biblioteca adicional para usar con slf4j) como motor de respaldo .

Su aplicación tendrá así

  • jcl104-over-slf4j.jar (para unir el registro de Yakarta commons a slf4j)
  • slf4j.jar (para hibernar y otros para usar slf4j)
  • slf4j-logj12.jar (para que slf4j use log4j como backend)
  • log4j.jar (para que su aplicación lo use. Toda la configuración también se realizará aquí)

Otros consejos

Aquí se explica cómo redirigir todo a SLF4J:

  • eliminar commons-logging.jar de su classpath. Si está utilizando Maven y tiene problemas para deshacerse de commons-logging, consulte esto .

  • ponga jcl-over-slf4j.jar en su classpath (viene en la distribución SLF4J). Este es un reemplazo directo que imita las clases de JCL, pero llama a SLF4J internamente. Esto se encargará de Spring y cualquier otro marco que use JCL.

Conecte SLF4J a su back-end favorito (Log4J, Logback ...) poniendo slf4j-xxx.jar en el classpath. Configure el backend para registrar todas las categorías en un archivo, y listo.

En cuanto al uso de SLF4J en su aplicación, no es estrictamente necesario. Las bibliotecas como JCL y SLF4J fueron diseñadas originalmente para personas que escriben bibliotecas y no desean bloquear a sus clientes en un marco de registro particular.

PD: por cierto, JCL = Registro de Yakarta Commons

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top