Как изменить уровень 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.