2012-06-05 39 views
13

¿Cómo gestiona Log4j múltiples log4j.properties en su classpath? ¿Qué archivo log4j.properties tiene prioridad? Déjame describir el escenario exacto.Múltiples archivos Log4j.properties en classpath

Tengo varios módulos maven desarrollados por diferentes equipos y cada uno de ellos tiene su propio archivo log4j.properties. Todos estos archivos log4j.properties tienen RootLogger configurado junto con ConsoleAppender y FileAppenders.

Ahora, cuando Log4j carga qué archivo log4j.properties usará para configurar los ajustes de RootLogger? Además, ¿cómo creará Log4j la jerarquía del registrador? ¿Cómo afectará el archivo log4j.properties en otras jarras de terceros al proceso de registro?

Respuesta

9

Se cargará el primer archivo en el classpath. Entonces, si A.jar y B.jar contienen un archivo, y A.jar viene antes de B.jar en el classpath, se cargará el archivo de A.jar. Así es como funciona el cargador de clases.

+0

que tienen un requisito específico Si quiero cargar tanto el archivo de propiedades, ¿cómo puedo achive ella? Quiero decir que deben cargarse los archivos log4j.properties de a.jar y b.jar ... ¿Hay alguna manera? – Gourabp

+0

¿Por qué necesitarías cargar ambos? El objetivo de externalizar la configuración de un archivo es poder configurar el registro de la manera que desee. Por lo tanto, los archivos jar no deberían venir con un archivo log4j.xml incluido.En su lugar, deben documentar qué registradores utilizan (por convención, el nombre del registrador es el nombre de la clase) y luego el ensamblador de la aplicación, utilizando ambos archivos jar, crearía su propio archivo de configuración, que contiene la configuración de todas las bibliotecas utilizadas en el solicitud. –

+0

Quiero cargar ambos porque estoy escribiendo una API de cliente donde quiero registrar los registros específicos de la API del cliente en un archivo separado. la aplicación puede tener su propia configuración de log4j pero no quiero que el lado del cliente cambie nada. Solo les daré el tarro de api donde se definirán el appender y el logger específicos de api. También tenga en cuenta que no quiero lograrlo programáticamente. Quiero hacerlo por configuración. – Gourabp

2

log4j ver 1.x:

Como otros han dicho, log4j busca el primer archivo de configuración en la ruta de clase. Ver: http://logging.apache.org/log4j/1.2/manual.html

Pero cuando hay tanto 'log4j.xml' y los archivos '' log4j.properties en la ruta de clase, parece que a partir de la experimentación log4j da preferencia a 'log4j.xml' sobre 'log4j.properties'.

es decir, en primer lugar, log4j parece buscar en el classpath el primer archivo 'log4j.xml'. Si no hay ninguno, entonces log4j parece buscar en el classpath para el primer archivo 'log4j.properties'.

copiar y pegar desde el código a continuación pueden ayudar a determinar qué archivo de configuración se está utilizando:

import org.apache.log4j.Logger; 

public class TestLog4j 
{ 

    static 
    { 
    System.out.println("Classpath: [" + System.getProperty("java.class.path") + "]"); 
    System.out.println("Found logging configuration files:"); 
    System.out.println(" log4j.xml: " + Logger.getRootLogger().getClass().getResource("/log4j.xml")); 
    System.out.println(" log4j.properties: " + Logger.getRootLogger().getClass().getResource("/log4j.properties")); 
    } 

    public static void main(String[] args) 
    { 
    System.out.println("main():"); 
    } 
} 

Editar:

log4j ver 2.x:

El el orden de búsqueda para el archivo de configuración predeterminado se documenta aquí: http://logging.apache.org/log4j/2.x/manual/configuration.html

es decir, para log4j versión 2.x, si no se encuentra un archivo de configuración de prioridad más alta (p. log4j2-test. [propiedades | yaml | json | xml]) entonces el archivo log4j2.properties se usa si se encuentra en classpath. Tenga en cuenta que log4j2.xml tiene la precedencia más baja y se usará solo si no se encuentran todos los archivos de configuración log4j2 'properties', 'yaml' o 'json'.

Nota: Para ayudar en la depuración de problemas de configuración de log4j, establezca la propiedad 'log4j.debug', p. con:

java -Dlog4j.debug ... 

Ver también:How to initialize log4j properly?

+0

parece que es al revés? consulte [enlace] (https://logging.apache.org/log4j/2.x/manual/configuration.html) –

+0

Respuesta editada para reflejar log4j ver 2.x, agregar enlace a la documentación (gracias @chandra_cst) y depuración adicional insinuación. –

Cuestiones relacionadas