Приложение, использующее jboss-logging, когда оно должно использовать log4j
Я обновляю приложение Spring MVC с Spring 3.1 до 4.3 и Hibernate 3.6 до 5.2. Я буду управлять этим в Wildfly 8. Зависимости управляются Maven.
Spring использует протоколирование общего достояния, которое просматривает путь к классу приложения и пытается выбрать подходящую структуру ведения журнала. В моем случае, похоже, что он выбирает не тот. Я включил log4j в мой pom.xml и, проверяя иерархию зависимостей, вижу, что jboss-logging не существует. Вот сообщение об ошибке, которое я получаю:
Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf
Так что, хотя у меня нет входа в jboss в моем проекте, comms-logging находит его где-то и пытается использовать, но безуспешно. После некоторых поисков я нашел jboss-logging-3.1.4.GA.jar в Wildfly.
Причина ошибки в том, что это старая версия jboss-logging. Я добавил новый jar-файл на сервер и отредактировал module.xml, чтобы указать на него, и ошибка исчезла. Это доказывает, что commons-logging находит jboss-logging на сервере.
Проблема в том, что я не хочу jboss-logging, я хочу log4j. Как заставить журналы общего пользования использовать log4j и игнорировать то, что находится на сервере?
Редактировать: я перешел по ссылке, которую поставил chrisharm, и добавил эти строки в файл standalone.xml:
<add-logging-api-dependencies value="false"/>
<use-deployment-logging-config value="false"/>
Я также изменил module.xml, чтобы он снова указывал на старый jar, так как я предпочел бы увидеть ошибку, если используется jboss. Когда я бегу сейчас, я получаю это:
Caused by: java.lang.NoClassDefFoundError: org/jboss/logging/Logger
Это может быть шагом в правильном направлении, так как теперь у Spring нет доступа к jboss-logging, но он все еще пытается использовать его по некоторым причинам.
1 ответ
https://docs.jboss.org/author/display/WFLY8/How+To
Если вам нужно / хотите включить вашу версию log4j, вам нужно выполнить следующие два шага.
- Отключите добавление зависимостей ведения журнала во все ваши развертывания с помощью атрибута add-logging-api-dependencies и отключите атрибут use-deploy-logging-config ИЛИ исключите подсистему ведения журнала в jboss-deploy-structure.xml.
- Затем необходимо включить библиотеку log4j в ваше развертывание.
Это работает только для входа в ваше развертывание. Журналы сервера будут продолжать использовать конфигурацию подсистемы журналирования.