Как изменить уровень slf4j во время выполнения?

Я использую SLF4j в качестве моей системы ведения журнала, поддерживаемой log4j. Моя проблема в том, что я ищу способ изменить уровень ведения журнала для моего регистратора во время выполнения.

Я понимаю, что slf4j не разрешает это напрямую через свой собственный API, и, следовательно, я должен напрямую обращаться к поставщику протоколирования. Лично я считаю, что это большой недостаток в slf4j. Итак, теперь мой вопрос заключается в том, как я могу определить программно через slf4j, какой провайдер я использую? Самая большая цель использования slf4j заключается в том, что вы становитесь агностиком провайдера - вы можете легко переключаться между вашей любимой системой ведения журнала, не перерабатывая ничего. Но теперь, если мне нужно делать прямые вызовы log4j, я теряю эту способность.

По крайней мере, я хотел бы иметь возможность определить, использую ли я log4j в качестве поставщика, и если да, то разрешите пользователю переключаться на уровни журналов.

Если я делаю LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME), результатом будет экземпляр org.slf4j.impl.Log4jLoggerAdapter и даже не org.apache.log4j.Logger (как я бы надеялся/ожидал).

Есть ли способ узнать это?

Спасибо, Эрик

Ответы

Ответ 1

SLF4J спроектирован как абстракция для библиотек, а не приложений (конечно, вы можете и должны использовать SLF4J в своих собственных вызовах регистрации приложений для согласованности). В вашем собственном приложении вы выбираете базовую структуру фреймворка, поэтому для доступа к API-интерфейсу log4j в части, зависящей от журнала, можно получить доступ.

Ни в коем случае не следует сбрасывать библиотеку с изменением конфигурации ведения журнала, IMHO, поэтому ему не подходит для использования в API SLF4J.