Я уже несколько дней стуча головой по этому поводу и не могу понять. Log4j2 обратно совместим, если вы добавите библиотеку совместимости log4j1.Компоненты, написанные против log4j1, не регистрируются после обновления log4j2.
Мой веб-инф \ Lib есть:
- SLF-апи
- log4j-1,2-апи (. Назад Compat библиотека)
- log4j-апи (log4j2)
- log4j-жильный (log4j2)
- log4j-полотно (автоматическое подключение для веб-приложений)
Мой web.xml имеет:
<!-- log4j2 auto-wiring -->
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>file:///${catalina.base}/conf/log4j2.xml</param-value>
</context-param>
Мой [кот] /conf/log4j2.xml является:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
<Appenders>
<!-- Appends to CONSOLE -->
<Console name="consoleAppender" target="SYSTEM_OUT">
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="%5p (%F:%L) - %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="com.mycompany.componentA" level="WARN" />
<Logger name="com.mycompany.componentA.QueryLogger" level="DEBUG" />
<Logger name="com.mycompany.mycode" level="DEBUG" />
<Root level="WARN">
<AppenderRef ref="consoleAppender" />
</Root>
</Loggers>
</Configuration>
Я обновил код под моим контролем (com.mycompany.mycode) к log4j2 API, и они работают/журнал безотказно. Код, который не под моим контролем, но был написан против log4j1 (com.mycompany.componentA), просто просто не регистрируется. Нет ошибок, нет отладок, ничего.
Что-то интересное, хотя ... когда я запускаю приложение, я получаю предупреждение log4j1 о некорректных конфигурациях при запуске приложения. Это также претит меня, потому что в WAR нет библиотек log4j1 (кроме API совместимости). Предупреждение:
log4j:WARN No appenders could be found for logger (com.mycompany.componentB)
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Это подтверждает утверждение Ральфа и мою гипотезу о том, что банда log4j1 все еще находится в пути к классам. –
Обновлен мой ответ другим способом, чтобы найти место для логарифма Log4j 1. –
Нет, это не подтверждает это. Все вызовы API log4j1 подключены к вызовам log4j2. Так что все это действительно подтверждает, что у вас нет больше идеи о том, что случилось, чем я. –