2011-04-07 61 views
16

Usando log4j, cómo puedo averiguar cuál es el nombre y la ruta del archivo DOMConfigurator actual log4j.xml, para restablecer el nombre del archivo usando el método PropertyConfigurator.configureAndWatch, que necesita el nombre y la ruta de este archivo para ver si ha cambiadolog4j: ¿qué archivo de configuración se usó?

El documento API me muestra cómo configurar log4j para volver a cargar la configuración, pero no puedo encontrar la forma de ver el nombre de archivo y la ruta que recogió automáticamente. La aplicación se ejecuta de forma independiente con cualquier servidor de aplicaciones.

Gracias.

Respuesta

21

Me temo que no tiene posibilidad de obtener la ruta de acceso recogida automáticamente de la API. Según entiendo el código fuente de log4j, la ruta detectada solo se usará y no se almacenará.

al menos se puede utilizar la propiedad -Dlog4j.debug para dar salida a la información de depuración log4j-interno en el arranque y obtendrá cierta información como esta:

log4j: Trying to find [log4j.xml] using context classloader [email protected] 
log4j: Using URL [file:/C:/develop/workspace/foobar/target/classes/log4j.xml] for automatic log4j configuration. 
log4j: Preferred configurator class: org.apache.log4j.xml.DOMConfigurator 

La línea 'log4j: Using URL ...' proviene de la clase LogManager. Puede verificar el proceso de inicialización desde aquí. Como veo, la URL no se almacenará para obtener información posterior.

2

Puede usar el mismo proceso que use log4j en la inicialización estática en la clase LogManager. Tenga en cuenta otras inicializaciones y configuraciones externas, p. de Spring's org.springframework.web.util.Log4jConfigListener.

public static URL getLog4jConfig() { 
    String override = OptionConverter.getSystemProperty("log4j.defaultInitOverride", null); 
    if (override == null || "false".equalsIgnoreCase(override)) { 
     String configurationOptionStr = OptionConverter.getSystemProperty("log4j.configuration", null); 

     URL url; 

     if (configurationOptionStr == null) { 
     url = Loader.getResource("log4j.xml"); 
     if (url == null) { 
      url = Loader.getResource("log4j.properties"); 
     } 
     } else { 
     try { 
      url = new URL(configurationOptionStr); 
     } catch (MalformedURLException ex) { 
      url = Loader.getResource(configurationOptionStr); 
     } 
     } 
     return url; 
    } else { 
     return null; 
    } 
    } 
Cuestiones relacionadas