`com.sun.org.slf4j.internal.Logger` в JDK и неправильное использование - PullRequest
1 голос
/ 08 апреля 2020

При работе с генерацией и проверкой подписи XMLSignature мне пришлось отлаживаться, и я столкнулся со странным поведением журналирования (я бы назвал это ошибками, но, возможно, у меня нет полной картины).

Метод доступа к регистратору com.sun.org.slf4j.internal.LoggerFactory#getLogger является частью jdk и используется внутри для получения экземпляра регистратора - проверяется с помощью jdk12.

Этот регистратор используется, например, org.jcp.xml.dsig.internal.dom.DOMReference и другими различными классами, связанными с XMLSignature.

Возвращенный регистратор является экземпляром com.sun.org.slf4j.internal.Logger, и это простая оболочка, которая делегирует каждый вызов экземпляр java.util.logging.Logger.

Мое первое наблюдение

Заполнитель {}, известный из slf4j, используется в лог-массаже, и я думаю, автор ожидал, что должна быть произведена какая-то замена параметров.

Пример из org.jcp.xml.dsig.internal.dom.DOMReference

LOG.debug("Reference object uri = {}", uri);

Поскольку регистратор является простой оболочкой и не выполняет никакой обработки, он не заменяется.

Мое сообщение журнала - это незаменимая строка журнала.

Обновление Регистратор вообще ничего не делает:

    public void debug(String s, Throwable e) {
        impl.log(java.util.logging.Level.FINE, s, e);
    }

    public void debug(String s, Object... o) {
        impl.log(java.util.logging.Level.FINE, s, o);
    }

Вопрос: это ошибка или я забыл включить "что-то"?

Мое второе наблюдение

В com.sun.org.slf4j.internal.Logger уровень журнала отладки сопоставлен с точным уровнем и уровнем журнала трассировки также отображается в порядке. Я бы ожидал, что уровень трассировки отображается как самый точный, но это не имеет значения, потому что трассировка в любом случае не используется.

Мое последнее наблюдение

Почему они используют slf4j в имени пакета? Это очень запутанно.

...