Отключить ведение журнала клиента Apache HTTP? - PullRequest
6 голосов
/ 02 марта 2011

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

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

Ответы [ 3 ]

7 голосов
/ 02 марта 2011

Предполагая, что вы используете httpclient 4 , не добавляет что-то вроде this в вашу работу 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>

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

1 голос
/ 07 февраля 2013

Данные ответы являются хорошими примерами людей, отвечающих на вопросы, которые они даже не понимают.Они просто повторяют то, что слышали или читали в плохой документации, например, в 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    }

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

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>

Вывод:

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

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

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

0 голосов
/ 02 марта 2011

Вы можете настроить уровень регистрации для каждого пакета.Вот пример из 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 (и вложенных пакетов) уровень будет «info»«Итак, вам нужно выяснить пакет, к которому принадлежат классы HTTP-клиентов, и добавить такую ​​запись в ваш конфиг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...