Отключить ведение журнала HttpClient - PullRequest
119 голосов
/ 06 февраля 2011

Я использую commons-httpclient 3.1 в комплекте интеграционных тестов.Журнал по умолчанию для HttpClient очень шумный, и я не могу его отключить.Я пытался следовать инструкциям здесь , но ни одна из них не имеет никакого значения.

В основном мне просто нужно закрыть регистратор org.apache.http.wire.Частично проблема в том, что я не знаю, какой тип регистратора пытается использовать HttpClient, и большая часть проблемы в том, что я никогда раньше не использовал эту библиотеку.Я попытался создать файл log4j.properties и поместить его в мою папку test / resources, изменить главный файл logging.properties в jre / lib и отправить в Maven различные параметры ведения журнала, как указано на странице logging * 1006.*, и ни один из них не имеет никакого значения.

Любая помощь приветствуется ... это сводит меня с ума.

ОБНОВЛЕНИЕ: Исправление: появляется выводНа самом деле речь идет о том, что jwebunit использует HttpClient, а не мой собственный.В любом случае, это нежелательно.

ОБНОВЛЕНИЕ: Спасибо за попытки до сих пор.Я попробовал все предложенное ниже, но все равно не повезло.У меня есть файл commons-logging.properties в моей папке src / test / resources со следующим содержимым

org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
log4j.configuration=log4j.properties

и файл log4j.properties в той же папке со следующим содержимым

log4j.rootLogger=ERROR, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n

#This is the line that should make httpclient shut up
log4j.logger.org.apache.http=ERROR

Однако, когда я запускаю свои тесты, я все равно получаю кучу выходных данных, таких как:

21:57:41.413 [main] DEBUG org.apache.http.wire - << "                                   [\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "                                   [\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "                               </ul>[\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "    [\n]"
21:57:41.424 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "                   </div>[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "                </li>[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "            [\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "            [\r][\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "        </ul>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "<div class="details">[\n]"
21:57:41.442 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "<div class="details-body details-precis  ">[\n]
"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "<div class="details-state">[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
Destroying 1 processes21:57:41.465 [main] DEBUG org.apache.http.wire - << "[\r][\n]"

Этот вывод для всего, что встречается по проводам, делает эту библиотеку непригодной для меня ... то естьпока я не могу понять, как его выключить.Что-нибудь особенное, что мне нужно сделать, чтобы прочитать эту конфигурацию журнала?

Ответы [ 26 ]

4 голосов
/ 06 февраля 2011

В вашем log4.properties - у вас есть этот набор, как я делаю ниже, и нет других org.apache.http регистраторов, установленных в файле?

-org.apache.commons.logging.simplelog.log.org.apache.http=ERROR

Также, если у вас не указан какой-либо уровень журналадля org.apache.http в вашем файле свойств log4j, то он унаследует уровень log4j.rootLogger.Так что если у вас log4j.rootLogger установлено, скажем, ERROR, и удалите org.apache.http настроек в ваших log4j.properties, которые должны сделать так, чтобы он только регистрировал ERROR сообщений только по наследству.

ОБНОВЛЕНИЕ:

Создайте файл commons-logging.properties и добавьте в него следующую строку.Также убедитесь, что этот файл находится в вашей CLASSPATH.

org.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.Log4jFactory

Добавленозаполненный файл log4j и код для его вызова для OP.Этот log4j.properties должен быть в вашем CLASSPATH.Я предполагаю, что стандартный вывод на данный момент.

log4j.configuration=log4j.properties 
log4j.rootLogger=ERROR, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n

log4j.logger.org.apache.http=ERROR

Вот код, который вам нужно добавить в свой класс, чтобы вызвать регистратор.

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; 

public class MyClazz
{
    private Log log = LogFactory.getLog(MyClazz.class);
    //your code for the class
}
3 голосов
/ 27 декабря 2011

У меня была такая же проблема с JWebUnit. Обратите внимание, что если вы используете бинарный дистрибутив, то Logback является регистратором по умолчанию. Чтобы использовать log4j с JWebUnit, я выполнил следующие шаги:

  • удалено Logback jars
  • добавить библиотеку мостов lod4j для sfl4j - slf4j-log4j12-1.6.4.jar
  • добавить log4j.properties

Возможно, вам не нужно удалять файлы Logback, но вам потребуется дополнительный шаг, чтобы заставить slf4j использовать log4j

3 голосов
/ 04 апреля 2013

Следующие 2 строки полностью решили мою проблему:

Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.ERROR);
Logger.getLogger("httpclient").setLevel(Level.ERROR);
2 голосов
/ 15 марта 2018

Для apache 4.5.3, если вы хотите переместить уровень для всех HTTP-журналов apache на Warn , используйте:

log4j.logger.org.apache=WARN
2 голосов
/ 27 апреля 2011

Меня привели к этому сообщению при поиске решения аналогичной проблемы.Ответ Тима был очень полезным.как и Мэтт Бейкер, я просто хочу отключить журнал httpClient без особых настроек.Поскольку мы не были уверены в том, какая реализация журналирования использовалась при обычном ведении журнала, Мое решение состояло в том, чтобы заставить его использовать log4j, добавив файл jar log4j в путь к классу.Настройка по умолчанию для конфигурации log4j отключает выходные данные отладки common-httpclient. Конечно, чтобы сделать его более надежным, вы можете создать файлы common-logging.properties и log4j.properties для дальнейшего определения конфигураций журналирования.

2 голосов
/ 02 октября 2016

Добавьте следующие строки в файл свойств log4j, и он закроет журналы http: - log4j.logger.org.apache.http = OFF

2 голосов
/ 02 февраля 2013

Попробуй поставить

org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog

в ваших общих ресурсах.properties

1 голос
/ 05 июня 2019

У меня тоже была такая же проблема. Во время выполнения тестов вся консоль была заполнена [main] DEBUG org.apache.http.wire.

Решением, которое работало для меня, было создание logback-test.xml src / test / resources / logback-test.xml как в https://github.com/bonigarcia/webdrivermanager-examples/blob/master/src/test/resources/logback-test.xml (ref - https://github.com/bonigarcia/webdrivermanager/issues/203)

Чтобы просмотреть информацию о журнале, я заменил logger name = "io.github.bonigarcia" на имя моего пакета

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.mypackage" level="DEBUG" />
    <logger name="org" level="INFO" />
    <logger name="com" level="INFO" />

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>
1 голос
/ 26 октября 2011

У меня была такая же проблема при запуске интеграционных тестов jwebunit. Я исправил это, исключив logback и добавив в slf4j-log4j12, вот так:

<dependency>
  <groupId>net.sourceforge.jwebunit</groupId>
  <artifactId>jwebunit-htmlunit-plugin</artifactId>
  <version>3.0</version>
  <exclusions>
    <exclusion>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>
1 голос
/ 01 мая 2012

Мне потребовалось много времени, чтобы выяснить это, вам нужно это:

log4j.logger.httpclient.wire=ERROR

Я думаю, HttpClient использует "httpclient.wire" в качестве имени своего регистратора, а не "org.apache.commons.httpclient".

Подлый пидор.

...