2011-04-07 24 views
16

Log4j'yi kullanarak, geçerli DOMConfigurator dosyasının log4j.xml dosyasının adı ve yolunun ne olduğunu nasıl bulabilirim, bu dosyanın adını ve yolunu bulması gereken PropertyConfigurator.configureAndWatch yöntemini kullanarak dosya adını sıfırlayın. eğer değişmişse.log4j: hangi yapılandırma dosyası kullanıldı?

API belgesi, log4j'nin yapılandırmayı yeniden yüklemesini nasıl yapılandıracağımı gösterir, ancak dosya adını ve yolunu otomatik olarak görmenin bir yolunu bulamıyorum. Uygulama, herhangi bir uygulama sunucusuna bağımsız olarak çalışıyor.

Teşekkürler.

cevap

21

Korkarım ki, API'den otomatik olarak alınan yolu alma şansınız yok. Log4j'nin kaynak kodunu anladığım gibi, tespit edilen yol sadece kullanılacak ve saklanmayacaktır.

En azından başlangıçta çıktı log4j-iç hata ayıklama bilgilerinin -Dlog4j.debug özelliğini kullanabilir ve bazı bilgiler şöyle alacak:

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 

'log4j: Using URL ...' hat LogManager sınıftan geliyor. Başlatma işlemini buradan kontrol edebilirsiniz. Gördüğüm gibi, daha sonraki bilgiler için URL saklanmayacak.

2

LogManager sınıfındaki statik başlatmada aynı işlemi log4j kullanımıyla kullanabilirsiniz. Diğer başlatmalardan ve harici konfigürasyonlardan haberdar olun, ör. Spring'in org.springframework.web.util.Log4jConfigListener'dan.

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; 
    } 
    } 
İlgili konular