Настройка log4j2 и log4j с использованием одного файла XML4j2 xml

180
10

Я перенес свое приложение в log4j 2, и я настроил его через log4j2.xml


Однако некоторые из библиотек, которые я использую, зависят от log4j 1. Если я запускаю приложение, используя:


-Dlog4j.configurationFile=path/to/log4j2.xml

log4j 1 жалуется на то, что не найдет файл конфигурации. Я использую мост log4j 1.x, предоставляемый log4j 2, log4j-1.2-api-2.0-rc1.jar. Можно ли настроить оба варианта с помощью одного log4j2.xml?


Альтернативой, которую я пробовал, является конфигурация как log4j, так и log4j2 вместе:


-Dlog4j.configurationFile=path/to/log4j2.xml -Dlog4j.configuration=path/to/log4j.xml

Моя забота - фрагментация моих файлов конфигурации журнала и вывода. Я также обеспокоен возможными конфликтами между log4j.xml и log4j2.xml. например logfile error.log настроен на использование FileAppender в log4j 1 и RollingFileAppender в log4j 2.


Любые советы?


[примечание]


Это ошибка, которую я вижу:


log4j:WARN No appenders could be found for logger (org.apache.activemq.util.ThreadPoolUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Версия log4j 2, которую я использую, - log4j 2.0 rc1.


[ответ]


Похоже, что activemq-5.8.0.jar был связан с log4j 1. Решением было просто загрузить мост log4j 1.x перед activemq.

спросил(а) 2021-01-25T11:36:18+03:00 4 месяца, 3 недели назад
1
Решение
233

Я бы рекомендовал использовать адаптер log4j-1.2, который включен в дистрибутив log4j2. Таким образом, любые библиотеки, закодированные в log4j-1.2 API, будут работать с log4j2 без каких-либо изменений кода.


Ваш путь к классу должен включать:


    log4j-апи-2.6.1.jar
    log4j-ядро-2.6.1.jar
    log4j-1.2-api-2.6.1.jar
    log4j2.xml

В вашем пути к классам должно быть не:


    log4j-1.2.x.jar
    log4j.properties или log4j.xml(в любом случае они будут игнорироваться log4j2)

См. также http://logging.apache.org/log4j/2.x/faq.html#which_jars

ответил(а) 2021-01-25T11:36:18+03:00 4 месяца, 3 недели назад
78

В проекте maven, использующем log4j2, можно исключить log4j из модулей, которые его используют в pom, чтобы включить log4j2:


<dependencies>
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.4</version>
<!--force usage of log4j2-->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.3</version>
</dependency>
</dependencies>

Подробнее об этом в log4j FAQ

ответил(а) 2021-01-25T11:36:18+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема