¿Debe iniciar sesión desde el código de la biblioteca?

38

Si estoy desarrollando una biblioteca Java, ¿es una buena práctica emitir declaraciones de registro desde el código de la biblioteca?

Tener un registro dentro de la biblioteca hará que la depuración y la resolución de problemas sean más transparentes. Sin embargo, por otro lado, no me gusta ensuciar el código de mi biblioteca con declaraciones de registro. ¿Hay alguna implicación de rendimiento a considerar también?

danés
fuente

Respuestas:

33

Si deberías. El uso de una fachada de registro como SLF4J le brinda flexibilidad sin sobrecargar a sus usuarios con un marco de registro particular.

Los autores de componentes y bibliotecas ampliamente distribuidos pueden codificar contra la interfaz SLF4J para evitar imponer un marco de registro al usuario final del componente o biblioteca. Por lo tanto, el usuario final puede elegir el marco de registro deseado en el momento de la implementación insertando el enlace slf4j correspondiente en la ruta de clase, que se puede cambiar más tarde reemplazando un enlace existente con otro en la ruta de clase y reiniciando la aplicación. Este enfoque ha demostrado ser simple y muy robusto.

Además, si sus usuarios no incluyen un jar SLF4J (de la guía del usuario ):

A partir de SLF4J versión 1.6.0, si no se encuentra ningún enlace en la ruta de clase, entonces slf4j-api pasará de forma predeterminada a una implementación sin operación, descartando todas las solicitudes de registro.

Si le preocupan las implicaciones de rendimiento del registro, consulte esta entrada de preguntas frecuentes de SLF4J . La idea es que proporcione parámetros para registrar las declaraciones en lugar de agregarlas a una cadena en línea:

Las siguientes dos líneas producirán exactamente la misma salida. Sin embargo, el segundo formulario superará al primero por un factor de al menos 30, en caso de una declaración de registro deshabilitada.

logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);

¿SLF4J es otra fachada de registro?

SLF4J es conceptualmente muy similar a JCL. Como tal, puede considerarse como otra fachada de tala más. Sin embargo, SLF4J es mucho más simple en diseño y posiblemente más robusto. En pocas palabras, SLF4J evita los problemas del cargador de clases que afectan a [Jakarta Commons Logging].

Mike Partridge
fuente
¿Existe una buena biblioteca de código abierto que se registre dentro del código de la biblioteca a la que pueda apuntar? para que podamos ver cómo se hace?
user1870400
Spring Framework es una biblioteca Java bastante conocida que hace esto; en su caso eligieron JCL.
Mike Partridge
17

, debe iniciar sesión desde el código de su biblioteca. No solo lo ayuda a desarrollarse, sino que las personas que usan la biblioteca lo encontrarán útil. Recuerde que siempre puede establecer los niveles de registro para mostrar solo las declaraciones de registro que necesita, y que pueden hacer lo mismo.

Recientemente estaba usando Mybatis , una herramienta ORM de código abierto. Estaba depurando un problema en el que una consulta que pensé que debería haber sido correcta no arrojaba resultados. Era una consulta parametrizada, y como Mybatis tiene un registro dentro de su código de biblioteca, pude activarlo y ver la consulta real que se está ejecutando. Fue fácil decir que cambié dos parámetros. Sin iniciar sesión en la biblioteca, no podría haber encontrado el problema tan rápido.

Michael K
fuente