Да се ​​деактивира ли регистрирането на apache HTTP Client?

Пиша приложение, в което качвам файл чрез HTTP протокол на сървър. Всичко работи добре и мога да кача файла, използвах Apache HTTP client jar, за да постигна това. В приложението използвах log4j рамка за регистриране, която е зададена на ниво DEBUG, по подразбиране Apache HTTP Client също е взел същата рамка за регистриране със същото ниво на регистриране и произвежда тонове регистрационни файлове. Може ли някой да ме насочи как мога да деактивирам регистриране на 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>

Изводът е:

  • Когато е възможно, научете се да намирате отговор на собствения си въпрос, вместо да питате.

  • Не вярвайте на това, което всички казват. Наименуването на регистраторите с пълно квалифицирано име на клас е конвенция. Както всички конвенции, никой не е длъжен да я спазва. Apache не го правят.

  • Не отговаряйте на въпрос, когато не знаете отговора. Това е само шум.

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