Где находится logger.getAppender (переход с log4j на slf4j+log4j)

Существующий код настраивает регистратор программно. Вот как это происходит

public void init (String logFile, Logger logger){
    Validate.isTrue(logger.getAppender(APPENDER_NAME) == null, "Logger has configured project appender");

    //remaining code
}

теперь я изменился logger объект из log4j войти в org.slf4j.Logger и получить ошибку, которая getAppender Метод не существует. Что должно быть альтернативой здесь.

1 ответ

Боюсь, что это невозможно при использовании slf4j API.

slf4j является API-интерфейсом фасадов регистратора и предоставляет только высокоуровневые методы, такие как debug, traceи т. д. Он не имеет понятия appenders, который является деталью реализации конкретного нижележащего каротажа, например log4j,

Отрывок из SLF4J FAQ:

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

То же самое верно для log4j2 API тоже.

Какие есть варианты:

  1. Отдельная часть кода, которая будет связана с log4j войти и сделать необходимые конфигурации и проверки там.

  2. Другой подход состоит в том, чтобы бросить slf4j войти в log4j после проверки:

    // log4j 1.x
    if (logger instanceof org.apache.logging.log4j.core.Logger) {
       org.apache.log4j.Logger log4j = (org.apache.log4j.Logger) logger;
       // access to log4j.getAppender("APPENDER_NAME");
    }
    
Другие вопросы по тегам