2011-04-07 10 views
16

Utilizzo di log4j, come individuare il nome e il percorso del file DOMConfigurator corrente utilizzato log4j.xml per ripristinare il nome file utilizzando il metodo PropertyConfigurator.configureAndWatch, che richiede il nome e il percorso di questo file per visualizzare se è cambiato.log4j: quale file di configurazione è stato utilizzato?

Il documento API mostra come configurare log4j per ricaricare la configurazione, ma non riesco a trovare un modo per visualizzare automaticamente il nome file e il percorso. L'applicazione è in esecuzione standalone con qualsiasi server di applicazioni.

Grazie.

risposta

21

Ho paura che tu non abbia la possibilità di ottenere il percorso prelevato automaticamente dall'API. Come ho capito il codice sorgente di log4j, il percorso rilevato verrà utilizzato e non verrà memorizzato.

almeno si può utilizzare la proprietà -Dlog4j.debug per emettere informazioni di debug log4j-interno all'avvio e si otterrà qualche informazioni in questo modo:

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 linea 'log4j: Using URL ...' proviene dalla classe LogManager. È possibile controllare il processo di inizializzazione da qui. Come vedo l'URL non verrà memorizzato per informazioni successive.

2

È possibile utilizzare lo stesso processo utilizzato da log4j sull'inizializzazione statica in classe LogManager. Essere a conoscenza di altre inizializzazioni e configurazioni esterne, ad es. da 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; 
    } 
    } 
Problemi correlati