При работе с генерацией и проверкой подписи 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 в имени пакета? Это очень запутанно.