Java Logging vs Log4J [cerrado]

134

¿Todavía vale la pena agregar la biblioteca log4j a un proyecto Java 5 solo para iniciar sesión, digamos algunas excepciones a un archivo con algunas configuraciones agradables de rollover? ¿O la instalación estándar de util.logging hará el trabajo también?

¿Qué piensas?

Okami
fuente
Consulte stackoverflow.com/a/13144054/603516 para conocer los numerosos problemas de bloqueo de log4j 1.2 a tener en cuenta.
Vadzim

Respuestas:

115

Yo diría que probablemente estés bien con util.logging para las necesidades que describas.

Para un buen árbol de decisión, eche un vistazo a Log4j vs java.util.logging

Pregunta uno: ¿Anticipa la necesidad de alguno de los controladores inteligentes que Log4j tiene que JUL no tiene, como SMTPHandler, NTEventLogHandler o cualquiera de los FileHandlers muy convenientes?

Pregunta dos: ¿Te ves con ganas de cambiar con frecuencia el formato de tu salida de registro? ¿Necesitará una manera fácil y flexible de hacerlo? En otras palabras, ¿necesita el PatternLayout de Log4j?

Pregunta tres: ¿Anticipa una necesidad definitiva de la capacidad de cambiar configuraciones complejas de registro en sus aplicaciones, después de que se compilan e implementan en un entorno de producción? ¿Su configuración suena algo así como: "Los mensajes severos de esta clase se envían por correo electrónico al tipo de soporte; los mensajes severos de un subconjunto de clases se registran en un demonio syslog en nuestro servidor; los mensajes de advertencia de otro subconjunto de clases se registran a un archivo en la unidad de red A, y luego todos los mensajes de todas partes se registran en un archivo en la unidad de red B "? ¿Y te ves retocando cada par de días?

Si puede responder sí a cualquiera de las preguntas anteriores, vaya con Log4j. Si responde un no definitivo a todos ellos, JUL será más que adecuado y, convenientemente, ya está incluido en el SDK.

Dicho esto, casi todos los proyectos en estos días parecen terminar, incluido log4j, aunque solo sea porque alguna otra biblioteca lo usa.

Matt Sheppard
fuente
1
Gran cuestionario basado en la respuesta. A cada uno lo suyo según las necesidades.
HopeKing
43

Le recomiendo que use la Fachada de registro simple para Java (SLF4J). Es compatible con diferentes proveedores que incluyen Log4J y puede usarse como un reemplazo para el registro de Apache Commons.

Brian Matthews
fuente
66
¿Qué hay de malo en Commons Logging?
Bart van Heukelom
55
@Bart van Heukelom y comentar los votantes: lea los artículos.qos.ch
Stephen C
44
@Stephen C: Gracias por la información, aunque lo aprendí hace algún tiempo y ahora estoy usando SLF4J siempre que puedo. (Mi comentario fue una pregunta real por cierto, no un comentario conservador)
Bart van Heukelom
1
@Bart, Commons Logging utiliza el descubrimiento dinámico del paquete a utilizar. El uso de SLF4J (o solía) necesita que las clases en el backend se carguen.
Thorbjørn Ravn Andersen
21

Log4j ha existido durante mucho tiempo y funciona muy bien. No tengo ningún estudio científico que lo respalde, pero según lo que he visto en un gran número de clientes, es fácilmente el marco de registro que veo que se usa más que ningún otro. Ha existido durante mucho tiempo y no ha sido reemplazado por el Next Big Logging Framework, que dice algo.

Es muy sencillo de configurar y fácil de aprender los apéndices básicos (salidas). Hay apéndices de host completos disponibles, que incluyen:

  1. ConsolaAppender
  2. DailyRollingFileAppender
  3. Acoplador de archivos externamente enrollado
  4. FileAppender
  5. JDBCAppender
  6. JMSAppender
  7. NTEventLogAppender
  8. RollingFileAppender
  9. SMTPAppender
  10. SocketAppender
  11. SyslogAppender
  12. TelnetAppender
  13. EscritorAppender

Además de otros. Tampoco es difícil escribir su propio apéndice. Además, hay una gran flexibilidad en cada uno de los apéndices que le permiten controlar específicamente lo que se genera en su registro.

Una nota, tuve una serie de problemas con el cargador de clases cuando usé el registro de apache commons además de log4j. Fue solo para una aplicación específica, pero me pareció más simple usar log4j solo, en lugar de tener la flexibilidad que se ofrece al usar una capa de abstracción como el registro de commons.

Vea este artículo para más detalles :

¡Buena suerte!

Rydell
fuente
17

java.util.logging ofrece un paquete completo de registro sin el exceso de equipaje que algunos de los otros proporcionan.

Adán
fuente
55
Además, se incluye por defecto y utilizar por sí mismo de Java (por lo que tendrá de todos modos!)
Ha dejado de fumar - Anony-Mousse
7

log4j es un paquete mucho mejor en general, y no tiene algunos de los inconvenientes que contiene java.util.logging. En segundo lugar, usar log4j directamente es más fácil que usar el registro de commons.

Will Sargent
fuente
3
¿Puede ser más específico sobre los problemas que tiene java.util.logging?
alkber
Claro, como la sobrecarga en el registro de métodos sincronizados: ver github.com/playframework/playframework/issues/6958 y bugs.openjdk.java.net/browse/JDK-8077846
Will Sargent
4

Recomiendo usar el registro de Apache Commmons como su interfaz de registro. De esa manera, tiene la flexibilidad de cambiar las implementaciones de registro en cualquier momento que desee sin requerir ningún cambio de código por su parte.

Edmund Tay
fuente
3

Yo iría con log4j. ¡Las posibilidades con log4j no son obsoletas en absoluto!

svrist
fuente