164 votes

Désactiver la journalisation HttpClient

Je suis à l'aide de commons-httpclient 3.1 dans un test d'intégration de la suite. La journalisation par défaut pour HttpClient est extrêmement bruyant et je n'arrive pas à l'éteindre. J'ai essayé de suivre les instructions ici, mais aucun d'eux ne fait aucune différence.

La plupart du temps je juste besoin de faire le org.apache.http.fil enregistreur de se taire. Une partie du problème est que je ne sais pas quel type de logger HttpClient est d'essayer d'utiliser et de plus le problème est que je n'ai jamais utilisé cette bibliothèque avant. J'ai essayé de créer un log4j.les propriétés de fichier et de le déposer dans mon test/dossier de ressources, la modification de la maîtrise de l'exploitation forestière.fichier de propriétés dans jre/lib, et l'envoi dans les différentes options de journalisation pour Maven, comme indiqué sur la page journalisation, et aucun d'eux ne fait aucune différence.

Toute aide est appréciée...c'est me rend fou.

Mise à JOUR: correction: il semble que la sortie en question est en fait originaire à jwebunit de l'utilisation de HttpClient, non la mienne propre. De toute façon, il n'est pas souhaitable.

Mise à JOUR: Merci pour les tentatives de la mesure. J'ai essayé tout ce qui est suggéré ci-dessous, mais toujours pas de chance. J'ai un fichier commons-logging.propriétés dans mon répertoire src/test/resources dossier avec le contenu suivant

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

et un fichier log4j.propriétés dans le même dossier avec le contenu suivant

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

Cependant, lorsque je lance mes tests, j'ai encore obtenir un tas de sortie comme ceci:

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]"

Cette sortie de tout ce qui vient à travers le fil est faire de cette bibliothèque inutilisable pour moi...jusqu'à ce que j'arrive à l'éteindre. Est-il rien de spécial, j'ai besoin de faire pour obtenir ce journal de lecture de configuration?

102voto

Sud Monkey Points 291

J'ai rencontré ce problème aussi. J'utilise log4j et j'ai essayé de définir le niveau de journalisation sur WARN en utilisant le nom du package (org.apache.commons.httpclient) dans mon log4j.properties:

 log4j.logger.org.apache.commons.httpclient=WARN
 

Cela n'a pas fonctionné, alors j'ai décidé de jeter un coup d'œil au code source httpclient (3.1) et j'ai remarqué que les noms des journaux étaient en réalité:

 public static Wire HEADER_WIRE = new Wire(LogFactory.getLog("httpclient.wire.header"));
public static Wire CONTENT_WIRE = new Wire(LogFactory.getLog("httpclient.wire.content"));
 

Alors j'ai ajouté:

 log4j.logger.httpclient.wire.header=WARN
log4j.logger.httpclient.wire.content=WARN
 

à mon log4j.properties et cela a fonctionné.

34voto

Tim Points 3652

Remarque: une partie de cette réponse pourrait répéter des choses que vous savez déjà (ou pense savoir), mais il est un peu de la mauvaise information qui circulent sur cette question, je vais donc commencer par le début et sort tout

  • Communes HttpClient utilise Commons-Logging pour l'ensemble de son enregistrement.
  • Commons-Logging n'est pas un plein de journalisation, mais plutôt, est un wrapper autour de plusieurs cadres de journalisation
  • Cela signifie que lorsque vous souhaitez contrôler la sortie d'enregistrement, vous (surtout) la fin de la configuration d'une bibliothèque autre que Commons-Logging, mais parce que Commons-Logging s'enroule autour de plusieurs autres bibliothèques, il est difficile pour nous de deviner lequel de configurer sans savoir exactement votre installation.
  • Commons-Logging peut se connecter à log4j, mais il peut également se connecter à d' java.util.logging (JDK1.4 enregistrement)
  • Commons-Logging essaie d'être intelligent et devinez qui journalisation vous utilisez déjà, et d'envoyer ses journaux.
  • Si vous n'avez pas de journalisation, et sont en cours d'exécution sur un JRE 1,4 ou au-dessus (que vous devriez vraiment être) ensuite, il sera probablement de l'envoi de messages du journal pour le JDK d'enregistrement (java.util.logging)
  • En s'appuyant sur Commons-Logging de la détection automatique du mécanisme est sujette à l'erreur. Simplement en ajoutant log4j.jar sur le classpath serait la cause de sélectionner le mécanisme de journalisation il utilise, ce qui n'est probablement pas ce que vous voulez
  • Il est préférable pour vous indiquer explicitement Commons-Logging de journalisation de la bibliothèque à utiliser
  • Vous pouvez le faire en créant un commons-logging.properties le fichier conformément à ces instructions
  • Les étapes à suivre pour configurer le commons-httpclient de journalisation sont
    1. Décider qui sous-tendent la journalisation cadre que vous souhaitez utiliser. Il y a un certain nombre de choix, mais aussi, probablement, log4j ou java.util.logging sont les meilleures options pour vous.
    2. Configurer les communes d'enregistrement de fichier de propriétés pour pointer vers le bon Log mise en œuvre. par exemple, pour utiliser log4j, mettre ceci dans le fichier de propriétés: org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
    3. Configurez le sous-jacent de la journalisation de la mise en œuvre (par exemple, log4j) pour ignorer les messages que vous ne voulez pas, de sortie et les messages que vous voulez.

C'est beaucoup d'étapes, mais c'est ce qu'il faut. Les développeurs de Apache commons ont tendance à supposer que vous aurez déjà une journalisation configuré, et ils peuvent travailler en auto-découverte.
Si ce n'est pas vrai pour vous, alors il a tendance à être un peu plus de travail pour obtenir des choses en cours d'exécution.

21voto

Daniel Magnusson Points 2945

Cela a fonctionné pour mes tests;

 java.util.logging.Logger.getLogger("org.apache.http.wire").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);
System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "ERROR");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "ERROR");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.headers", "ERROR");
 

20voto

Philip Nuzhnyy Points 855

Je mets cela dans mon fichier de configuration log4j

 log4j.logger.org.apache.http.wire=WARN
 

Cela limite la sortie au niveau d'avertissement ou supérieur

8voto

kewpiedoll99 Points 811

Nous utilisons XML plutôt qu'un fichier de propriétés pour configurer notre sortie de journalisation. Le code suivant a fonctionné pour faire taire ce bavardage.

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

<logger name="httpclient.wire.header">
    <level value="fatal"/>
</logger>

<logger name="httpclient.wire.content">
    <level value="fatal"/>
</logger>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X