Мы используем slf4j и logback для входа в наше веб-приложение java ee. Недавно, чтобы переместить эти библиотеки в общее место на сервере приложений Glassfish (в частности, в каталог Glassfish\lib), мы внесли несколько изменений в конфигурацию. Мы внесли изменения в файл web.xml, чтобы добавить записи JNDI и переименовали logback.xml
в logback-<context-name>.xml
, как указано в здесь. а>. logback-<context-name>.xml
находится в каталоге WEB-INF\classes.
После этого изменения ведение журнала для библиотек hibernate и http-client по умолчанию переходит в режим отладки, и, следовательно, ведется много журналов. Корневой регистратор имеет уровень журнала INFO, и для библиотек hibernate и http-client не определены специальные регистраторы.
Если я отменю это изменение, т. е. удалю запись jndi в web.xml и переименую файл конфигурации в logback.xml, как и ожидалось, будут регистрироваться только журналы INFO.
Любые предложения о том, что может быть проблемой?
Спасибо.
Обновить
При дальнейшем устранении неполадок я сообщил, что клиентские библиотеки hibernate и apache используют контекст регистратора по умолчанию, созданный во время инициализации. Этот контекст средства ведения журнала имеет корневой уровень журнала, установленный на DEBUG. Мы используем JNDI в качестве селектора контекста.
Странно, что имя контекста не найдено во время выполнения, когда класс ConnectionManager (класс hibernate — org.hibernate.jdbc.ConnectionManager) пытается создать экземпляр регистратора. Создание экземпляра регистратора вызывает метод ContextJNDISelector.getLoggerContext(). Этот метод выполняет поиск JNDI, но не находит запись.
Я устранил неполадки, создав поток в прослушивателе контекста сервлета для печати записи JNDI (java:comp/env/logback/context-name) каждые 3 секунды. В журналах потока указано, что записи JNDI всегда присутствуют.
Любые идеи, почему contextName не найдено в JNDI при запросе ContextJNDISelector?