понедельник, 1 сентября 2014 г.

Доступ к Appender-ам logback в коде

Мы почти везде используем для логирования logback. Иногда надо получить доступ к его Appender-ам в runtime. Зачем ? Например, если я хочу получить пути файлов, в которые идёт запись логов - чтобы архивировать и передать по http клиенту (если это, скажем, web-приложение).

Пример доступа :

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
// проходим по всем loggers
for (ch.qos.logback.classic.Logger logger : lc.getLoggerList()) {
    // от каждого logger получаем его appenders
    Iterator iter = logger.iteratorForAppenders();
    while (iter.hasNext()) {
        Appender appender = (Appender) iter.next();
        // тут приходится анализировать конкретные классы 
        if (appender instanceof FileAppender) {
                  ....
        }
    }
}