2011-08-15 27 views
24

E-postaları desteklemek için otomatik olarak günlük dosyalarını eklemek yararlı olur. Yolu programsal olarak (Setting Logback Appender path programmatically'da olduğu gibi) ayarlayabilirim, ancak kullanıcıların logback.xml aracılığıyla tanıdık şekilde günlüğe kaydetmeyi yapılandırmasına izin vermeyi tercih ederim. Yani, logback için logback kullanımlarını bulabilir miyim?Logback log dosyalarını programlı olarak bulmak mümkün mü?

+0

Üzgünüz, ama sorumu anlayamıyorum. Biraz genişletebilir misin? – Ceki

+1

@Ceki: daha genel olarak, Logback tarafından kullanılan tüm eklerin listesini alabilir miyim? –

cevap

28

Belirli bir bağlamda tüm eklerin listesini alabilirsiniz. Bunun için:

LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory(); 
for (Logger logger : context.getLoggerList()) { 
     for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); index.hasNext();) { 
      Appender<ILoggingEvent> appender = index.next(); 
     } 
    } 

Bu yineler geçerli bağlam için tüm kaydedicilerinin tüm appenders listesinin üzerine.

+1

iteratorForAppenders metodu artık logger üzerinde mevcut değil (http://www.slf4j.org/apidocs/org/slf4j/Logger.html). Şimdi nasıl çalıştığına dair bir fikrin var mı? – user3885927

+0

@ user3885927 ch.qos.logback.classic.Logger dosyasını içe aktardığınızdan emin olun ve org.slf4j.Logger! – Catchwa

17

@ tafoo85 tarafından verilen yanıt doğrudur ancak size yalnızca ekleri verecektir.

Logback logger tarafından kullanılan daha özel bir get dosyası için, umarım aşağıdaki kod bir kısmına yardımcı olur.

File clientLogFile; 
FileAppender<?> fileAppender = null; 
LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory(); 
for (Logger logger : context.getLoggerList()) 
{ 
    for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); 
       index.hasNext();) 
    { 
      Object enumElement = index.next(); 
      if (enumElement instanceof FileAppender) { 
       fileAppender=(FileAppender<?>)enumElement; 
      } 
    } 
} 

if (fileAppender != null) { 
    clientLogFile=new File(fileAppender.getFile()); 
} 
else { 
    clientLogFile = null; 
} 

Log.d("logfile path", clientLogFile.getAbsolutePath()); 
+0

Tam olarak ihtiyacım olan şeydi, ancak Object enumElement = index.next(); 'ila Addender enumElement = index.next();' fileAppender = (FileAppender ) enumElement; dosyaAppender = (FileAppender ) enumElement; –

+1

@danial daha spesifik olacaktır. ama 2-3 dosya kaydedici (hata ayıklama ve izleme) istiyorsanız, bu kod mükemmel çalışacaktır. – androidnoobdev

İlgili konular