2011-03-02 29 views
5

Estoy escribiendo una aplicación en la que estoy cargando un archivo utilizando el protocolo HTTP a un servidor. Todo está funcionando bien y puedo subir el archivo, he utilizado el conjunto de servidores HTTP de Apache Apache para lograr esto. En la aplicación he usado log4j logging framework que se ha establecido en el nivel DEBUG, de manera predeterminada Apache HTTP Client también ha recogido el mismo framework de registro con el mismo nivel de registro y está produciendo toneladas de registros. ¿Alguien puede guiarme sobre cómo puedo deshabilitar el registro del cliente Apache Http?¿Deshabilitar el registro de Apache HTTP Client?

Estoy configurando log4j con la ayuda de un nombre de archivo XML log4j.xml.

Respuesta

7

Asumiendo que están utilizando httpclient 4, no añadiendo algo así como this a su trabajo log4j.xml:

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

os no tienen un log4j.xml crear uno y que a su classpath.

Si está utilizando httpclient 3 entonces usted tendrá que usar algo como:

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

En estos ejemplos que he puesto el nivel de advertir, es posible optar por utilizar ninguno, pero un mínimo de error sería sensato.

0

Puede ajustar el nivel de registro por paquete. Aquí es un ejemplo 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> 

lo tanto, incluso si su nivel por defecto es "depuración", para las clases de paquete (com.eatmutton.muttonsite.torque y paquetes anidados) el nivel sería "info" Así , debe averiguar el paquete al que pertenecen las clases de cliente HTTP y agregar dicho registro a su configuración.

1

Las respuestas dadas son buenos ejemplos de personas que responden preguntas que ni siquiera entienden. Simplemente repiten lo que han escuchado o leído en documentaciones deficientes como la del cliente Apache HTTP. Algo así como:

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

es lo que debe hacerse si la documentación del cliente Apache HTTP era correcta. En tal caso, el póster de esta pregunta habría resuelto el problema él mismo. Dar respuestas tan pobres es algo insultante.

El problema es que, aunque la documentación dice:

Cada clase tiene su propio registro de nombre de acuerdo a nombre completo de la clase. Por ejemplo, la clase HttpClient tiene un registro llamado org.apache.commons.httpclient.HttpClient. Dado que todas las clases siguen esta convención, es posible configurar el registro de contexto para todas las clases utilizando el único registro llamado org.apache.commons.httpclient.

simplemente no es verdad.

Mejor que dar la respuesta es mostrar cómo encontrarlo usted mismo. Para encontrar la solución, primero debe habilitar la ubicación en el registro para ver dónde ocurre el registro.A continuación, los registros se muestra una línea como:

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

Esto demuestra que el registro está sucediendo en la clase Wire.java, línea 84. A continuación, puede abrir las fuentes en su IDE favorito y y verá lo siguiente:

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 registro contiene el registrador. Ir al lugar donde estas variables recibe su valor:

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

Todo lo que tiene que hacer ahora es poner un punto de ruptura en la línea 56 y ejecutar la aplicación en el depurador. Cuando se detenga en la línea 56, lea el valor del registro. Como es un objeto de tipo Log, ábralo y vea su propiedad "name". Verás el nombre "httpclient". Obviamente, la documentación de Apache es incorrecta.

Ahora se puede desactivar este registrador con:

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

La conclusión es:

  • Cuando sea posible, aprender a encontrar la respuesta a su propia pregunta en lugar de preguntar.

  • No crea lo que dice todo el mundo. Nombrar los registradores por el nombre de clase completamente calificado es una convención. Como todas las convenciones, nadie está obligado a seguirlo. Un Apache no.

  • No conteste la pregunta cuando no sepa la respuesta. Esto es solo ruido.

Cuestiones relacionadas