2011-08-15 10 views
24

Przydatne byłoby automatyczne dołączanie plików dziennika do obsługi wiadomości e-mail. Mogę ustawić ścieżkę programowo (jak w Setting Logback Appender path programmatically), ale wolę pozwolić użytkownikom skonfigurować logowanie w znany sposób przez logback.xml. Czy mogę znaleźć pliki do wykorzystania logback do logowania?Czy można znaleźć program logback logback?

+0

Przepraszam, ale nie rozumiem pytania. Czy mógłbyś nieco rozwinąć? – Ceki

+1

@Ceki: bardziej ogólnie, czy mogę uzyskać listę wszystkich aplikantów używanych przez Logback? –

Odpowiedz

28

Możesz otrzymać listę wszystkich elementów dodających w określonym kontekście. Aby to zrobić:

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

Powtarza to listę wszystkich elementów wprowadzających we wszystkich rejestratorach dla bieżącego kontekstu.

+1

Metoda iteratorForAppenders już nie istnieje w programie rejestrującym (http://www.slf4j.org/apidocs/org/slf4j/Logger.html). Masz pomysł, jak to działa? – user3885927

+0

@ user3885927 upewnij się, że importujesz plik ch.qos.logback.classic.Logger, a nie org.slf4j.Logger! – Catchwa

17

Odpowiedź podana przez @ tafoo85 jest poprawna, ale da Ci tylko aplikantów.

Aby dokładniej uzyskać plik używany przez Logback Logger, mam nadzieję, że poniższy kod pomoże mu.

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

Było dokładnie to, czego potrzebowałem, chociaż zmieniłem wiersz 'Object enumElement = index.next();' na 'Appender enumElement = index.next();' oraz 'fileAppender = (FileAppender ) enumElement; 'do' fileAppender = (FileAppender ) enumElement; ', aby działało poprawnie. –

+1

@danial, który będzie bardziej szczegółowy. ale jeśli chcesz mieć 2-3 plik rejestratora (debugowanie i śledzenie), ten kod będzie działał idealnie. – androidnoobdev