2011-08-15 15 views
24

Sería útil adjuntar automáticamente archivos de registro para admitir correos electrónicos. Podría establecer el camino programáticamente (como en Setting Logback Appender path programmatically), pero preferiría permitir a los usuarios configurar el registro de la manera familiar a través del logback.xml. Entonces, ¿puedo encontrar los archivos que Logback usa para iniciar sesión?¿Es posible encontrar archivos de logback log programmatically?

+0

Lo siento pero no entiendo la pregunta. ¿Podrías expandir un poco? – Ceki

+1

@Ceki: de manera más general, ¿puedo obtener una lista de todos los appenders utilizados por Logback? –

Respuesta

28

Puede obtener la lista de todos los appenders en un contexto determinado. Para ello:

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

Este itera sobre la lista de todos appenders en todos los registradores para el contexto actual.

+1

El método iteratorForAppenders ya no existe en el registrador (http://www.slf4j.org/apidocs/org/slf4j/Logger.html). ¿Alguna idea de cómo funciona ahora? – user3885927

+0

@ user3885927 asegúrese de importar ch.qos.logback.classic.Logger y no org.slf4j.Logger! – Catchwa

17

La respuesta dada por @ tafoo85 es correcta, pero solo le dará apéndices.

Para obtener un archivo más específico usado por Loglog logger espero que el siguiente código ayude a alguien.

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

Era exactamente lo que necesitaba, aunque cambié la línea 'Object enumElement = index.next();' a 'Appender enumElement = index.next();' así como a 'fileAppender = (FileAppender ) enumElement; 'to' fileAppender = (FileAppender ) enumElement; 'para que funcione para mí. –

+1

@danial que será más específico. pero si quiere el registrador de archivos 2-3 (depuración y rastreo), este código funcionará perfectamente. – androidnoobdev

Cuestiones relacionadas