Включить ведение журнала отладки для Log4J2 + Apache HttpClient

im пытается активировать ведение журнала отладки для моего Apache HttpClient, но не может заставить его работать (не получая никакого вывода журнала вообще, который связан с HttpClient).

Это моя конфигурация log4j2 im, использующая в данный момент:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
    <appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <RollingFile name="RollingRandomAccessFile" fileName="logs/test.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout>
                <Pattern>
                    %d %p %c{1.} [%t] %m%n
                </Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingFile>

        <Async name="async">
            <AppenderRef ref="RollingRandomAccessFile" />
        </Async>
    </appenders>
    <loggers>
        <logger name="org.apache.http.wire" level="debug" />
        <logger name="org.apache.http.client" level="debug" />
        <logger name="org.apache.xerces.parsers.SAXParser" level="warn" />
        <logger name="org.hibernate" level="warn" />
        <root level="trace">
            <appender-ref ref="console" />
            <appender-ref ref="async" />
        </root>
    </loggers>
</configuration>

изменение уровня с warn на debug для hibernate работает отлично, например.

эти библиотеки im с помощью:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>fluent-hc</artifactId>
    <version>4.2.6</version>
    </dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.2.6</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.2.5</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient-cache</artifactId>
    <version>4.2.6</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpmime</artifactId>
    <version>4.2.6</version>
</dependency>

Log4J2

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.0-beta9</version>
</dependency>

у кого-нибудь есть идеи? Я пробовал уже по-другому имена пакетов, такие как

httpclient.wire
httpclient.wire.header
httpclient.wire.content

и еще несколько, но ничего не работает...

2 ответов


Я предполагаю, что httpcomponents используют log4j-1.2 внутри. Log4j2 предоставляет адаптер, который направляет вызовы из приложения, использующего API 1.2, в новую реализацию 2.0.

чтобы включить это, вам нужно только добавить банки log4j-core и log4j-1.2-api в свой путь к классам. (Ваши текущие зависимости Maven имеют только log4j-api, который является новым API 2.0.) См. также http://logging.apache.org/log4j/2.x/faq.html .


Remko прав, что проблема заключается в httpcomponents с использованием log4j-1.2 внутри. Адаптер, который направляет log4j 1.2 в log4j 2, называется Мост log4j 1.2 и описывается здесь:https://logging.apache.org/log4j/2.x/log4j-1.2-api/index.html.

на странице артефакты maven для log4j объясняется, как настроить зависимости maven для включения библиотеки моста:

настройки log4j 1.X API Bridge

Если существующие компоненты используют Log4j 1.X и вы хотите иметь этот журнал перенаправлено в Log4j 2, затем удалите любой log4j 1.зависимости X и добавить следующий.

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.5</version>
  </dependency>
</dependencies>

от https://logging.apache.org/log4j/2.x/maven-artifacts.html