Обертывание API slf4j

Я хочу переоборудовать slf4j с Logback в устаревшее приложение. Хорошая вещь, у унаследованного приложения есть своя собственная структура регистрации. Поэтому все, что мне нужно было сделать, - это изменить структуру ведения журнала, чтобы записывать в журнал slf4j вместо log4j.

Это работало как сон. Я был счастлив, пока не заметил местоположение Logback, записываемого для каждого события журнала:

Logger.java:...

Yikes! Это не очень помогло моим коллегам-разработчикам, когда я пытался выяснить, откуда пришло событие журнала.

Как я могу сказать Logback, чтобы он смотрел на несколько уровней вверх в стеке, чтобы найти фактическое местоположение для записи?

Класс logger - это служебный класс с такими методами:

public static void debug(String clazz, String message) {
    org.slf4j.Logger logger = LoggerFactory.getLogger(clazz);
    logger.debug(message);
}
7
задан Stijn Van Bael 16 August 2010 в 08:52
поделиться

2 ответа

Нашел решение, просматривая исходный текст jcl-over-slf4j. Большинство реализаций slf4j (включая logback) используют логгеры, реализующие LocationAwareLogger, который имеет метод log, ожидающий в качестве одного из аргументов полное имя класса оберточного логгера:

private static final String FQCN = Logger.class.getName();


public static void debug(String clazz, String message) {
    org.slf4j.Logger logger = LoggerFactory.getLogger(clazz);
    if (logger instanceof LocationAwareLogger) {
        ((LocationAwareLogger) logger).log(null, FQCN, LocationAwareLogger.DEBUG_INT, message, null, null);
    } else {
        logger.debug(message);
    }
}
12
ответ дан 6 December 2019 в 11:45
поделиться

Как это сделать, смотрите в различных реализациях XXX-over-slf4j.

В основном вы хотите заменить ваш текущий фреймворк логгеров полностью. Не оборачивайте slf4j.

Редактировать:

Другим подходом может быть написание собственного макета, подкласса того, который вы используете сейчас, с измененным значением полей %m, %l и т.д., что позволяет обойтись без дополнительного стекового кадра.

5
ответ дан 6 December 2019 в 11:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: