Estamos usando log4j detrás de un envoltorio hecho a sí mismo. Tenemos la intención de utilizar muchas más características de la misma ahora.
¿Deberíamos actualizar al inicio de sesión?
(Quiero decir, el marco no es una fachada como SLF4J)
Estamos usando log4j detrás de un envoltorio hecho a sí mismo. Tenemos la intención de utilizar muchas más características de la misma ahora.
¿Deberíamos actualizar al inicio de sesión?
(Quiero decir, el marco no es una fachada como SLF4J)
Respuestas:
Logback implementa de forma nativa la API SLF4J. Esto significa que si está utilizando el inicio de sesión, en realidad está utilizando la API SLF4J. Teóricamente, podría usar los componentes internos de la API de logback directamente para el registro, pero eso es altamente desaconsejado. Toda la documentación y ejemplos de registro en los registradores están escritos en términos de la API SLF4J.
Entonces, al usar logback, en realidad estaría usando SLF4J y si por alguna razón quisiera volver a log4j, podría hacerlo en minutos simplemente soltando slf4j-log4j12.jar en su ruta de clase.
Al migrar de logback a log4j, las partes específicas de logback, específicamente las contenidas en el archivo de configuración logback.xml , aún tendrían que migrarse a su equivalente log4j, es decir, log4j.properties . Al migrar en la otra dirección, la configuración de log4j, es decir , log4j.properties , debería convertirse a su equivalente de logback. Hay una herramienta en línea para eso. La cantidad de trabajo involucrado en la migración de los archivos de configuración es mucho menor que el trabajo requerido para migrar las llamadas del registrador distribuidas en todo el código fuente de su software y sus dependencias.
Deberías Sí .
¿Por qué? Log4J esencialmente ha sido desaprobado por Logback .
¿Es urgente? Tal vez no.
¿Es indoloro? Probablemente, pero puede depender de sus declaraciones de registro.
Tenga en cuenta que si realmente desea aprovechar al máximo LogBack (o SLF4J), entonces realmente necesita escribir declaraciones de registro adecuadas . Esto generará ventajas como un código más rápido debido a la evaluación perezosa y menos líneas de código porque puede evitar guardias.
Finalmente, recomiendo SLF4J. (¿Por qué recrear la rueda con tu propia fachada?)
En el mundo de registro hay fachadas (como Apache Commons Logging, slf4j o incluso la API Log4j 2.0) e implementaciones (Log4j 1 + 2, java.util.logging, TinyLog, Logback).
Básicamente, debe reemplazar su envoltorio hecho a sí mismo con slf4j SI y solo SI no está satisfecho con él por alguna razón. Si bien Apache Commons Logging no proporciona realmente una API moderna, slf4j y la nueva fachada Log4j 2 sí lo están proporcionando. Dado que muchas aplicaciones usan slf4j como envoltorio, podría tener sentido usar eso.
slf4j da una cantidad de azúcar API agradable, como este ejemplo de documentos slf4j:
logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);
Es una sustitución variable. Esto también es compatible con Log4j 2.
Sin embargo, debe tener en cuenta que slf4j es desarrollado por QOS que también mantiene el inicio de sesión. Log4j 2.0 está horneado en la Apache Software Foundation. En los últimos tres años, una comunidad vibrante y activa ha crecido allí nuevamente. Si aprecia Open Source como lo hace Apache Software Foundation con todas sus garantías, puede reconsiderar el uso de slf4j a favor de usar Log4j 2 directamente.
Tenga en cuenta:
En el pasado, log4j 1 no se mantenía activamente mientras que Logback sí. Pero hoy las cosas son diferentes. Log4j 2 se mantiene activamente y se lanza en un horario casi regular. También incluye muchas características modernas y -imho- hace un par de cosas mejores que Logback. Esto a veces es solo una cuestión de gustos y debes sacar tus propias conclusiones.
Escribí un resumen rápido sobre las nuevas características de Log4j 2.0: http://www.grobmeier.de/the-new-log4j-2-0-05122012.html
Al leer, verá que Log4j 2 se inspiró en Logback pero también en otros marcos de registro. Pero la base del código es diferente; no comparte casi nada con Log4j 1 y cero con Logback. Esto conduce a algunas mejoras como, por ejemplo, Log4j 2 funciona con bytestreams en lugar de cadenas debajo del capó. Además, no pierde eventos durante la reconfiguración.
Log4j 2 puede iniciar sesión con mayor velocidad que otros marcos que conozco: http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html
Y aún así, la comunidad de usuarios parece ser mucho más grande que Logbacks: http://www.grobmeier.de/apache-log4j-is-the-leading-logging-framework-06082013.html
Dicho todo esto, la mejor idea es que elija los marcos de registro que mejor se adapten a lo que desea lograr. No cambiaría un marco completo si deshabilitara el inicio de sesión en el entorno de producción y solo realizara el inicio de sesión básico en mi aplicación. Sin embargo, si hace un poco más con el registro, solo mire las características que proporcionan los marcos y sus desarrolladores. Si bien obtiene soporte comercial para Logback a través de QOS (escuché) actualmente no hay soporte comercial para Log4j 2. Por otro lado, si necesita hacer un registro de auditoría y necesita un alto rendimiento proporcionado por los anexos asíncronos, tiene mucho sentido verifique log4j 2.
Tenga en cuenta que a pesar de toda la comodidad que brindan, las fachadas siempre comen un poco de rendimiento. Tal vez no te esté afectando en absoluto, pero si tienes pocos recursos, es posible que necesites guardar todo lo que puedas tener.
Sin conocer mejor sus requisitos, es casi imposible dar una recomendación. Simplemente: no cambies solo porque mucha gente cambia. Cambie solo porque vea su valor. Y la argumentación de que log4j está muerto ya no cuenta. Está vivo y hace calor.
DESCARGO DE RESPONSABILIDAD: Actualmente soy vicepresidente de Apache Logging Services y también participo en log4j.
No responde exactamente a su pregunta, pero si puede alejarse de su envoltorio hecho a sí mismo, entonces existe la Fachada de registro simple para Java (SLF4J) a la que Hibernate ahora ha cambiado (en lugar del registro común).
SLF4J no sufre ninguno de los problemas del cargador de clases o las pérdidas de memoria observadas con Jakarta Commons Logging (JCL).
SLF4J admite el registro JDK, log4j y logback. Entonces, debería ser bastante fácil cambiar de log4j a logback cuando sea el momento adecuado.
Editar: disculpas que no me había dejado claro. Estaba sugiriendo usar SLF4J para aislarse de tener que tomar una decisión difícil entre log4j o logback.
Su decisión debe basarse en
Debe resistir el impulso de cambiar las API solo porque es "más nuevo, más brillante, mejor". Sigo una política de "si no está roto, no lo patees".
Si su aplicación requiere un marco de registro muy sofisticado, es posible que desee considerar por qué.
Un proyecto maduro o incluso un proyecto profundo en las etapas de desarrollo probablemente perdería más que ganar con dicha actualización, en mi humilde opinión. El inicio de sesión es ciertamente mucho más avanzado en una variedad de puntos, pero no hasta cierto punto para el reemplazo completo en un sistema de trabajo. Ciertamente consideraría el inicio de sesión para un nuevo desarrollo, pero el log4j existente es lo suficientemente bueno y maduro para todo lo que ya se lanzó y se encontró con el usuario final. Esto es muy subjetivo, deberías ver que te cuesta.