Отключить ведение журнала HTTP-клиента apache?

Я пишу приложение, в котором загружаю файл по протоколу HTTP на сервер. Все работает нормально, и я могу загрузить файл, для этого я использовал клиентский jar-файл Apache HTTP. В приложении я использовал структуру ведения журнала log4j, для которой был установлен уровень DEBUG, по умолчанию HTTP-клиент Apache также использует ту же структуру ведения журнала с тем же уровнем ведения журнала и создает тонны журналов. Может ли кто-нибудь подсказать мне, как я могу отключить ведение журнала клиента apache Http?

Я настраиваю log4j с помощью XML-файла с именем log4j.xml.


person user381878    schedule 02.03.2011    source источник


Ответы (3)


Предполагая, что вы используете httpclient 4, не добавляет что-то вроде этот к вашей работе log4j.xml:

<logger name="org.apache.http">
  <level value="warn"/> 
</logger>

Если у вас нет файла log4j.xml, создайте его и укажите путь к классам.

Если вы используете httpclient 3, вам придется использовать что-то вроде:

<logger name="org.apache.commons.httpclient">
  <level value="warn"/> 
</logger>

В этих примерах я установил уровень предупреждать, вы можете выбрать нет, но минимум ошибка будет разумным.

person Joel    schedule 02.03.2011

Данные ответы являются хорошими примерами людей, отвечающих на вопросы, которые они даже не понимают. Они просто повторяют то, что слышали или читали в плохой документации, например, в HTTP-клиенте Apache. Что-то типа:

<logger name="org.apache.commons.httpclient">
  <level value="warn"/> 
</logger>

это то, что нужно сделать, если документация HTTP-клиента Apache была правильной. В таком случае автор этого вопроса сам бы решил проблему. Давать такие плохие ответы как-то оскорбительно.

Проблема в том, что хотя в документации написано:

У каждого класса есть собственный журнал, названный в соответствии с полным именем класса. Например, класс HttpClient имеет журнал с именем org.apache.commons.httpclient.HttpClient. Поскольку все классы следуют этому соглашению, можно настроить ведение журнала контекста для всех классов, используя единый журнал с именем org.apache.commons.httpclient.

это просто неправда.

Лучше, чем дать ответ, показать, как найти его самому. Чтобы найти решение, вы должны сначала включить местоположение в журнале, чтобы увидеть, где происходит журнал. Затем в журналах будет отображаться строка вида:

2013-02-07 15:33:02,369 DEBUG [Some thread name] org.apache.commons.httpclient.Wire.wire(Wire.java:84) - << "[\r]"

Это показывает, что ведение журнала происходит в классе Wire.java, строка 84. Затем вы можете открыть исходники в своей любимой среде IDE и увидеть следующее:

80    if (buffer.length() > 0) {
81        buffer.append("\"");
82        buffer.insert(0, "\"");
83        buffer.insert(0, header);
84        log.debug(buffer.toString()); // Log is happening here
85    }

Переменная log содержит регистратор. Перейдите к месту, где эти переменные получают свое значение:

52 /** Log for any wire messages. */
53 private Log log;
54 
55 private Wire(Log log) {
56    this.log = log;
57 }

Все, что вам нужно сделать сейчас, это поставить точку останова на строке 56 и запустить приложение в отладчике. Когда он остановится на строке 56, прочитайте значение журнала. Поскольку это объект типа Log, откройте его и посмотрите на его свойство «name». Вы увидите имя «httpclient». Очевидно, что документация Apache неверна.

Теперь вы можете отключить этот регистратор с помощью:

<logger name="httpclient">
  <level value="warn"/> 
</logger>

Вывод таков:

  • По возможности научитесь находить ответ на свой вопрос вместо того, чтобы спрашивать.

  • Не верьте тому, что все говорят. Именование регистраторов по полному имени класса является соглашением. Как и все условности, никто не обязан ей следовать. Апачи этого не делают.

  • Не отвечайте на вопрос, когда не знаете ответа. Это только шум.

person Pierre-Yves Saumont    schedule 07.02.2013

Вы можете настроить уровень ведения журнала для каждого пакета. Вот пример из http://wiki.apache.org/logging-log4j/Log4jXmlFormat. :

<logger name="com.eatmutton.muttonsite.torque" additivity="false">
   <level value="info" />
   <appender-ref ref="local-torque" />
</logger>

Таким образом, даже если ваш уровень по умолчанию «отладка», для классов пакета com.eatmutton.muttonsite.torque (и вложенных пакетов) уровень будет «информация». Итак, вам нужно выяснить пакет, к которому относятся классы клиента HTTP, и добавьте такую ​​запись в свой конфиг.

person Paul Lysak    schedule 02.03.2011