2016-03-23 7 views
0

Alternatif yapılandırma log4j kurmak için bu hatayı işlemek istiyorum. Mümkün mü?Nasıl yapılır: "log4j: WARN Kaydedici için hiçbir eki bulunamadı"?

Ben sadece en log uyarıları

log4j:WARN No appenders could be found for logger (agent.Test1Agent.JavaAgent). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
+0

Yığın izlemenizi paylaşabilir misiniz? – user1697575

+0

Lütfen, yorum (lar) ın içine koymak yerine hata mesajlarını sorgusuna eklemeyi düşünün. –

cevap

0

İstediğiniz şeyi doğru bir şekilde yapmanın bir yolu yoktur çünkü log4j yanlış yapılandırılma durumunda herhangi bir istisna alamaz veya bir şekilde uyarmaz. Ama bu mümkün.

import org.apache.log4j.LogManager; 
import org.apache.log4j.Logger; 
import org.apache.log4j.PropertyConfigurator; 
import org.apache.log4j.helpers.Loader; 
import org.apache.log4j.spi.Configurator; 

import java.io.OutputStream; 
import java.io.PrintStream; 
import java.net.URL; 

public class Log4jAlternativeConfig { 

    private static class PrintStreamCallbackSupportDecorator extends PrintStream { 

     public PrintStreamCallbackSupportDecorator(OutputStream out, Callback callback) { 
      super(out); 
      this.callback = callback; 
     } 

     public interface Callback { 
      public void onPrintln(String x); 
     } 

     private Callback callback; 

     @Override 
     public void println(String x) { 
      callback.onPrintln(x); 
      super.println(x); 
     } 
    } 

    public static void main(String[] args) { 

     PrintStreamCallbackSupportDecorator.Callback callback = new PrintStreamCallbackSupportDecorator.Callback() { 
      @Override 
      public void onPrintln(String x) { 
       if (x.startsWith("log4j:WARN No appenders could be found for logger")) { 
        Configurator configurator = new PropertyConfigurator(); 
        URL url = Loader.getResource("log4j_alternative.properties"); 
        configurator.doConfigure(url, LogManager.getLoggerRepository()); 
       } 
      } 
     }; 

     System.setErr(new PrintStreamCallbackSupportDecorator(System.err, callback)); 

     Logger log = LogManager.getLogger(Log4jAlternativeConfig.class); 

     //causes "No appenders could be found for logger" warning 
     log.error("test"); 

     //should be logged as configured in log4j_alternative.properties 
     log.error("test 2"); 
    } 
} 

çözüm aşağıda
Bkz PoC mükemmel değil ama işe yarıyor.

0

, herhangi stacktrace yok kurabilirsiniz Sınıfyolu üzerinde varsayılan bir yapılandırma dosyası sağlayarak alternatif bir log4j yapılandırması. Log4j, varsayılan yapılandırma dosyalarını bulmak için Thread.getContextClassLoader().getResource()'u kullandığından ve dosya sistemini doğrudan kontrol etmediğinden, bu kutuda bulunmalıdır. Böylece, harici konfigürasyon yoksa, varsayılan konfigürasyona geri dönecektir. Daha fazla bilgi için bkz. http://logging.apache.org/log4j/1.2/faq.html#noconfig Daha fazla bilgi için