2011-03-02 6 views
5

J'écris une application dans laquelle je télécharge un fichier en utilisant le protocole HTTP à un serveur. Tout fonctionne bien et je suis en mesure de télécharger le fichier, j'ai utilisé le fichier client HTTP Apache défini pour accomplir cela. Dans l'application, j'ai utilisé le framework de journalisation log4j qui a été défini sur le niveau DEBUG. Par défaut, Apache HTTP Client a également récupéré le même framework de journalisation avec le même niveau de journalisation et produit des tonnes de logs. Quelqu'un peut-il me guider comment puis-je désactiver la journalisation de Apache Http client?Désactiver la journalisation du client HTTP apache?

Je configure log4j à l'aide d'un nom de fichier XML log4j.xml.

Répondre

7

En supposant que vous utilisez httpclient 4, ne pas ajouter quelque chose comme this à votre travail log4j.xml:

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

Je vous ne disposez pas d'un log4j.xml créer un et à votre classpath.

Si vous utilisez httpclient 3 alors vous devrez utiliser quelque chose comme:

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

Dans ces exemples, j'ai mis le niveau pour avertir , vous pouvez choisir d'utiliser aucun, mais un minimum de erreur serait judicieux.

0

Vous pouvez ajuster le niveau de journalisation par paquet. Voici par exemple de http://wiki.apache.org/logging-log4j/Log4jXmlFormat:

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

Donc, même si votre niveau par défaut est « debug », pour les classes du paquet com.eatmutton.muttonsite.torque (et packages imbriqués) le niveau serait « info » donc , vous devez trouver le paquet auquel appartiennent les classes de client HTTP et ajouter un tel enregistrement à votre config.

1

Les réponses données sont de bons exemples de personnes répondant à des questions qu'ils ne comprennent même pas. Ils ne font que répéter ce qu'ils ont entendu ou lu dans de mauvaises documentations comme celle du client HTTP Apache. Quelque chose comme:

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

est ce qui devrait être fait si la documentation du client HTTP Apache était correcte. Dans un tel cas, l'affiche de cette question aurait résolu le problème lui-même. Donner de si mauvaises réponses est un peu insultant.

Le problème est que même si la documentation dit:

Chaque classe a son propre journal nommé selon le nom complet de la classe. Par exemple, la classe HttpClient possède un journal nommé org.apache.commons.httpclient.HttpClient. Étant donné que toutes les classes suivent cette convention, il est possible de configurer la journalisation du contexte pour toutes les classes en utilisant le journal unique nommé org.apache.commons.httpclient.

ce n'est tout simplement pas vrai.

Mieux que de donner la réponse est de montrer comment le trouver vous-même. Pour trouver la solution, vous devez d'abord activer l'emplacement dans le journal pour voir où le journal se produit.Ensuite, les journaux seront affiche une ligne comme:

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

Cela montre que l'exploitation forestière qui se passe en classe Wire.java, ligne 84. Vous pouvez alors ouvrir les sources dans votre IDE préféré et vous verrez les éléments suivants:

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 } 

La variable de journal contient l'enregistreur. Allez à l'endroit où cette variable reçoit sa valeur:

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

Tout ce que vous avez à faire est maintenant de mettre un point d'arrêt à la ligne 56 et exécutez votre application dans le débogueur. Quand il s'arrête à la ligne 56, lisez la valeur du journal. Comme c'est un objet de type Log, ouvrez-le dans sa propriété "name". Vous verrez le nom "httpclient". Obvioullyly, la documentation d'Apache est fausse.

Maintenant, vous pouvez désactiver cet enregistreur avec:

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

La conclusion est:

  • Lorsque cela est possible, apprendre à trouver réponse à votre propre question au lieu de demander.

  • Ne croyez pas ce que tout le monde dit. Nommer les enregistreurs par le nom de classe entièrement qualifié est une convention. Comme toutes les conventions, personne n'est obligé de le suivre. Un Apache non.

  • Ne répondez pas à la question si vous ne connaissez pas la réponse. C'est seulement du bruit.

Questions connexes