2008-08-28 23 views
119

¿Todavía vale la pena agregar la biblioteca de log4j a un proyecto de Java 5 solo para registrar digamos algunas excepciones a un archivo con algunas configuraciones de rollover agradables. ¿O la instalación estándar de registro de servicios también hará el trabajo?Registro de Java vs Log4J

¿Qué opinas?

+0

Ver http://stackoverflow.com/a/13144054/603516 para numerosas cuestiones log4j 1.2 de bloqueo a ser considerado. – Vadzim

Respuesta

103

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

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

Primera pregunta: ¿Se prevé una necesidad para cualquiera de los manipuladores inteligentes que Log4J ha que julio no tiene, como el SMTPHandler, NTEventLogHandler, o cualquiera de los muy útiles FileHandlers?

Pregunta dos: ¿Cree que quiere cambiar con frecuencia el formato de su salida de registro? ¿Necesitará una manera fácil y flexible de hacerlo? En otras palabras, ¿necesitas PatternLayout de Log4j?

Pregunta tres: ¿Anticipa una necesidad definitiva para la capacidad de cambiar configuraciones de registro complejas en sus aplicaciones, después de que se compilan y despliegan 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 a la persona de soporte, los mensajes graves de un subconjunto de clases se registran en un deamon 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 ya está convenientemente incluido en el SDK.

Dicho esto, prácticamente todos los proyectos parecen terminar incluyendo log4j, aunque solo sea porque alguna otra biblioteca lo usa.

+1

Gran respuesta basada en el cuestionario. Para cada uno, según las necesidades. – HopeKing

3

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

4

Recomiendo usar Apache Commmons Logging como su interfaz de registro. De esta forma, tiene la flexibilidad de cambiar las implementaciones de registro en cualquier momento que desee sin requerir ningún cambio de código en su extremo.

39

Te recomiendo que uses el Simple Logging Facade for Java (SLF4J). Es compatible con diferentes proveedores que incluyen Log4J y se puede utilizar como reemplazo de Apache Commons Logging.

+5

¿Qué pasa con el registro de Commons? –

+5

@Bart van Heukelom y comentar votaciones - leer http://articles.qos.ch/thinkAgain.html –

+4

@Stephen C: Gracias por la información, aunque lo aprendí hace un tiempo y ahora estoy usando SLF4J siempre que puedo. (Mi comentario fue una pregunta real, por cierto, no es una observación conservadora) –

17

Log4j existe desde hace mucho tiempo y funciona muy bien. No tengo ningún estudio científico para respaldarlo, pero en base a lo que he visto en un gran número de clientes, es fácilmente el marco de trabajo de registro que veo utilizado más que cualquier otro. Ha existido por mucho tiempo, y no ha sido reemplazado por Next Big Logging Framework, que dice algo.

Es muy simple de configurar y fácil de aprender los appenders básicos (salidas).Hay toda una appenders anfitrionas disponibles, incluyendo:

  1. ConsoleAppender
  2. DailyRollingFileAppender
  3. ExternallyRolledFileAppender
  4. FileAppender
  5. JDBCAppender
  6. JMSAppender
  7. NTEventLogAppender
  8. RollingFileAppender
  9. SMTPAppender
  10. SocketAppender
  11. SyslogAppender
  12. TelnetAppender
  13. WriterAppender

Plus otros. No es difícil escribir tu propio appender tampoco. Además, hay una gran flexibilidad en cada uno de los agregados que le permite controlar específicamente lo que se genera en su registro.

Una nota, tuve una serie de problemas con el cargador de clases cuando utilicé el registro de Apache commons además de log4j. Era 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 cuando se utiliza una capa de abstracción como el registro de recursos comunes.

Consulta este artículo para more details:

Buena suerte!

7

log4j es un paquete mucho más agradable 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.

+2

¿Podrían ser más específicos sobre los inconvenientes que tiene java.util.logging? – alkber

+0

Claro, al igual que la sobrecarga en el registro de métodos sincronizados: ver https://github.com/playframework/playframework/issues/6958 y https://bugs.openjdk.java.net/browse/JDK-8077846 –

14

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

+2

Además, es ** incluido por defecto ** y ** utilizado por Java en sí ** (¡así que lo tendrá de todos modos!) –

Cuestiones relacionadas