2012-03-16 13 views
18

Estoy escribiendo una biblioteca que reúne varias funciones que voy a utilizar en diferentes aplicaciones. Quiero que genere declaraciones de registro visibles para el usuario de la biblioteca, es decir, si estoy creando una aplicación y estoy usando la biblioteca, quiero que la biblioteca genere declaraciones de registro visibles para mí. ¿Cómo puedo hacer eso? Dado que el desarrollador de la aplicación configurará el archivo de registro, ¿cómo sabrá la biblioteca cómo iniciar sesión?Logger for Java library

+0

Eche un vistazo al marco Spring. Específicamente, la capacidad de Inyección de Dependencia es la parte que le resulta más útil. – cdeszaq

Respuesta

23

Si está desarrollando una bibliotecalos demás incluirán en su aplicación se debe utilizar un registro fachada. De lo contrario, obligará a los usuarios de su biblioteca a configurar e incluir el marco de registro que haya elegido además del marco que eligieron para su aplicación.

Por ejemplo, si usted utiliza log4j pero el desarrollador usando su biblioteca utiliza logback tendrá que incluir un archivo de configuración de log4j y el tarro de log4j (o tomar other measures) para hacer feliz a su biblioteca.

Fachadas de registro resolver este problema (de Apache Commons Registro):

Al escribir una biblioteca es muy útil para registrar información. Sin embargo, hay muchas implementaciones de registro, y una biblioteca no puede imponer el uso de una particular en la aplicación general de la que forma parte la biblioteca.

El paquete de registro es un puente ultradelgado entre diferentes implementaciones de registro. Una biblioteca que usa la API de registro de recursos comunes se puede usar con cualquier implementación de registro en tiempo de ejecución. El registro de Commons tiene soporte para varias implementaciones de registro populares, y adaptadores de escritura para otros es una tarea razonablemente simple.

O el razonamiento de SLF4J:

La fachada de registro simple para Java o (SLF4J) sirve como una fachada simple o abstracción para diversos marcos de registro, por ejemplo, java.util.logging, log4j y logback, lo que permite al usuario final conectar el marco de registro deseado en despliegue tiempo.

Los candidatos para fachadas de registro son:

Personalmente recomendaría SLF4J (con Logback).

+0

Su ejemplo es engañoso. El desarrollador puede usar la API SLF4J para el adaptador de código y log4j para terceros al mismo tiempo. Luego simplemente selecciona un backend SLF4J como logback. De hecho, esta es una razón para SLF4J, es tan simple. No es necesaria la configuración de log4j. –

+0

@RostislavMatl ¿Estás hablando de SLF4J "módulos puente" (http://www.slf4j.org/legacy.html)? Esto le permite usar una biblioteca que usa log4j, ... internamente y redirigir sus mensajes de registro a SLF4J (que puede estar respaldado por logback). Esta es sin duda una gran característica si usted es el USUARIO de una biblioteca. Sin embargo, cuando usted es el DESARROLLADOR de una biblioteca, ¿por qué debería obligar a sus usuarios a pasar por tales aros? ¿Por qué no usar una fachada directamente? Como la página SLF4J indica que estas soluciones son "apropiadas para software que escapa a su control". Por favor corrígeme si te he entendido mal. – Joe23

+0

Aparentemente hablamos de cosas diferentes. Usted escribió: "si usa log4j pero el desarrollador que usa su biblioteca usa logback tendrá que incluir una configuración de log4j", eso no es verdad. Y es una mala solución al mismo tiempo. No te dije que no puedes usar SLF4J mientras desarrollas un nuevo código. Elegí el punto o vista del usuario de la biblioteca porque con más frecuencia serás el usuario que el creador. –

2

La ubicación de su archivo de registro se establece fuera del paquete, en una configuración de marco de registro. El archivo de configuración generalmente está en classpath. La forma en que se ve depende de la estructura de registro que utilice, recomiendo ir con SLF4J y Logback.