Обтекание API slf4j - PullRequest
       8

Обтекание API slf4j

7 голосов
/ 16 августа 2010

Я хочу переоборудовать 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);
}

Ответы [ 2 ]

12 голосов
/ 16 августа 2010

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

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);
    }
}
5 голосов
/ 16 августа 2010

См. Различные реализации XXX-over-slf4j, чтобы узнать, как это сделать.

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

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

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

...