tool registro que por pasa mac desinstalo desinstalar completo completamente java logging apache-commons-httpclient jwebunit

registro - regedit java



Deshabilitar el registro HttpClient (21)

Estoy utilizando commons-httpclient 3.1 en un paquete de prueba de integración. El registro predeterminado para HttpClient es extremadamente ruidoso y parece que no puedo apagarlo. He intentado seguir las instrucciones here pero ninguno de ellos hace la diferencia.

Sobre todo, solo necesito cerrar el registrador org.apache.http.wire. Parte del problema es que no sé qué tipo de registrador HttpClient está tratando de usar y la mayor parte del problema es que nunca antes había usado esta biblioteca. Intenté crear un archivo log4j.properties y soltarlo en mi carpeta de prueba / recursos, modificar el archivo maestro logging.properties en jre / lib y enviar las diversas opciones de registro a Maven como se especifica en la here , y ninguna de ellas hacer alguna diferencia

Cualquier ayuda es apreciada ... esto me está volviendo loco.

ACTUALIZACIÓN: Una corrección: parece que la salida en cuestión se origina en el uso de HttpClient de jwebunit, no en el mío. De cualquier manera, no es deseable.

ACTUALIZACIÓN: Gracias por los intentos hasta ahora. Intenté todo lo que se sugiere a continuación, pero todavía no tuve suerte. Tengo un archivo commons-logging.properties en mi carpeta src / test / resources con los siguientes contenidos

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

y un archivo log4j.properties en la misma carpeta con los siguientes contenidos

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

Sin embargo, cuando realizo mis pruebas todavía obtengo un montón de resultados como este:

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

Esta salida para todo lo que viene a través del cable está haciendo que esta biblioteca sea inutilizable para mí ... eso es hasta que pueda descubrir cómo desactivarla. ¿Hay algo especial que deba hacer para que se lea esta configuración de registro?


Actualice log4j.properties para incluir:

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

Tenga en cuenta que si la biblioteca Log4j no está instalada, HttpClient (y por lo tanto JWebUnit) usará logback. En esta situación, cree o edite logback.xml para incluir:

<configuration> <logger name="org.apache" level="WARN" /> <logger name="httpclient" level="WARN" /> </configuration>

Establecer el nivel de registro en WARN con Log4j utilizando el nombre de paquete org.apache.commons.httpclient en log4j.properties no funcionará como se esperaba:

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

Esto se debe a que la fuente de HttpClient (v3.1) utiliza los siguientes nombres de registro:

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


Agregue las siguientes líneas en el archivo de propiedades log4j y cerrará los registros http: - log4j.logger.org.apache.http = OFF


En su log4.properties, ¿tiene este conjunto como lo hago a continuación y no hay otros registradores org.apache.http establecidos en el archivo?

-org.apache.commons.logging.simplelog.log.org.apache.http=ERROR

Además, si no tiene ningún nivel de registro especificado para org.apache.http en su archivo de propiedades log4j, heredará el nivel log4j.rootLogger . Por lo tanto, si ha configurado log4j.rootLogger para decir ERROR y elimina la configuración de org.apache.http en su log4j.properties que debería hacer que solo registre mensajes de ERROR solo por herencia.

ACTUALIZAR:

Cree un archivo commons-logging.properties y agregue la siguiente línea a él. También asegúrese de que este archivo esté en su CLASSPATH.

org.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.Log4jFactory

Se agregó un archivo log4j completado y el código para invocarlo para el OP. Este log4j.properties debe estar en su CLASSPATH. Estoy asumiendo stdout por el momento.

log4j.configuration=log4j.properties 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 log4j.logger.org.apache.http=ERROR

Aquí hay un código que debe agregar a su clase para invocar al registrador.

import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class MyClazz { private Log log = LogFactory.getLog(MyClazz.class); //your code for the class }


Esto funcionó para mis pruebas;

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");


Esto me llevó años descubrirlo, necesitas esto:

log4j.logger.httpclient.wire=ERROR

Supongo que HttpClient utiliza "httpclient.wire" como su nombre de registrador, no como "org.apache.commons.httpclient".

Sniperos astutos.


Experimenté tal problema después de configurar HttpComponentsClientHttpRequestFactory para mi plantilla de descanso.

Establecer OkHttpClientHttpRequestFactory debería resolver el problema con el registro de basura.


He estado plagado por el mismo problema desde hace bastante tiempo y finalmente decidí investigar esto. Resultó que el problema es que mi proyecto tenía una dependencia en http-builder-0.5.2.jar que incluía un archivo log4j.xml dentro de sí mismo. Y, por supuesto, el nivel de registro para org.apache.http.wire fue DEBUG! La forma en que lo encontré fue simplemente revisar todos los archivos jar en mis dependencias y hacer "jar tvf" y guardar para log4j.

Si bien este descubrimiento condujo a la solución final de aumentar la versión de mi dependencia http-builder a 0.6, aún me desconcierta lo que debe haber pasado por la mente del desarrollador al agrupar el archivo log4j.xml en el archivo jar. De todos modos, eso probablemente no sea relevante para este hilo por ahora. Pero pensé que sería útil mencionar esta solución que encontré dado que cuando estaba buscando una solución antes de ahora, la mía nunca surgió. Con suerte, alguien encontrará esto útil.


Intenta poner

org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog

en su commons-logging.properties


La mejor solución que encontré fue usar el plugin maven enforcer para evitar que el registro de commons se use por completo. Luego agregué la dependencia slf4j para el registro en su lugar. Así que agrega lo siguiente a tu pom.xml

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>[your version here]</version> </dependency>

y también agrega el complemento maven-enforcer

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>[your version here]</version> <executions> <execution> <id>enforce</id> <configuration> <rules> <DependencyConvergence /> <bannedDependencies> <excludes> <exclude>commons-logging:commons-logging</exclude> </excludes> </bannedDependencies> </rules> </configuration> <goals> <goal>enforce</goal> </goals> </execution> </executions> </plugin>


Las siguientes 2 líneas resolvieron mi problema por completo:

Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.ERROR); Logger.getLogger("httpclient").setLevel(Level.ERROR);


Llevó demasiado tiempo descubrir esto, pero JWebUnit viene incluido con el componente de registro de Logback , por lo que ni siquiera usará log4j.properties o commons-logging.properties .

En su lugar, cree un archivo llamado logback.xml y colóquelo en su carpeta de código fuente (en mi caso, src ):

<configuration debug="false"> <!-- definition of appender STDOUT --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> </encoder> </appender> <root level="ERROR"> <!-- appender referenced after it is defined --> <appender-ref ref="STDOUT"/> </root> </configuration>

Logback parece estar aún en desarrollo y la API parece estar cambiando, por lo que este ejemplo de código puede fallar en el futuro. Ver también esta pregunta de .


Manera simple Log4j y HttpCLient (v3.1 en este caso, debería funcionar para mayor, podría requerir cambios menores)

¡Asegúrate de que todas las dependencias sean correctas y MD5 tus descargas!

import org.apache.commons.httpclient.HttpClient; import org.apache.log4j.Level; import org.apache.log4j.Logger; --- Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.WARN); Logger.getLogger("httpclient.wire.header").setLevel(Level.WARN); Logger.getLogger("httpclient.wire.content").setLevel(Level.WARN); HttpClient client = new HttpClient();


Me llevaron a esta publicación cuando buscaba una solución para un problema similar. La respuesta de Tim fue muy útil. como Matt Baker, solo quiero cerrar httpClient log sin demasiada configuración. Como no estábamos seguros de qué implementación de inicio de sesión se usaba debajo de Common-Logging, mi solución fue forzarlo usando log4j lanzando el archivo log4j jar en la ruta de clase. La configuración predeterminada de la configuración de log4j cierra la salida de depuración common-httpclient. Por supuesto, para hacerlo más robusto, puede crear common-logging.properties y log4j.properties para definir mejor sus configuraciones de registro.


Para apache 4.5.3, si desea mover el nivel de Apache HTTP Client Logging a Warn , use:

log4j.logger.org.apache=WARN


Para log4j, agregue lo siguiente a log4j.properties (en el directorio de source la aplicación):

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

Para logback, el siguiente logback.xml matará el ruido:

<configuration> <logger name="org.apache" level="WARN" /> <logger name="httpclient" level="WARN" /> </configuration>


Puse esto en mi archivo de configuración log4j

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

Esto limita la salida al nivel de Advertencia o superior


Tuve el mismo problema al ejecutar las pruebas de integración jwebunit. Lo arreglé excluyendo logback y agregando slf4j-log4j12, así:

<dependency> <groupId>net.sourceforge.jwebunit</groupId> <artifactId>jwebunit-htmlunit-plugin</artifactId> <version>3.0</version> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency>


Tuve el mismo problema con JWebUnit. Tenga en cuenta que si utiliza la distribución binaria, Logback es un registrador predeterminado. Para usar log4j con JWebUnit realicé los siguientes pasos:

  • quitado Logback jar
  • agregue la librería de puente lod4j para sfl4j - slf4j-log4j12-1.6.4.jar
  • agregar log4j.properties

Probablemente no tenga que eliminar los archivos de Logback, pero necesitará algún paso adicional para forzar que slf4j use log4j.


Usamos XML, en lugar de un archivo de propiedades, para configurar nuestro resultado de registro. El siguiente código trabajó para silenciar esta charla.

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


Nota: Algunas de estas respuestas pueden repetir cosas que ya sabes (o crees que sabes), pero hay un poco de información errónea flotando en torno a esta pregunta, así que voy a comenzar desde el principio y deletrearlo todo.

  • Commons HttpClient usa Commons-Logging para todas sus necesidades de registro.
  • Commons-Logging no es un marco de registro completo, sino que es un contenedor de varios marcos de trabajo de registro existentes.
  • Eso significa que cuando quieres controlar la salida de registro, (la mayoría) terminas configurando una biblioteca que no sea Commons-Logging, pero como Commons-Logging se ajusta a varias otras bibliotecas, es difícil para nosotros adivinar cuál configurar sin saber su configuración exacta.
  • Commons-Logging puede iniciar sesión en log4j, pero también puede iniciar sesión en java.util.logging (registro de JDK1.4)
  • Commons-Logging intenta ser inteligente y adivinar qué marco de registro ya está utilizando, y enviar sus registros a eso.
  • Si aún no cuenta con un marco de trabajo de registro y está ejecutando un JRE de 1.4 o superior (que realmente debería ser), probablemente envíe sus mensajes de registro al registro de JDK ( java.util.logging )
  • Confiar en el mecanismo de autodescubrimiento de Commons-Logging es propenso a errores. Simplemente agregar log4j.jar en classpath provocaría que cambie el mecanismo de registro que usa, que probablemente no es lo que quieres
  • Es preferible que usted diga explícitamente a Commons-Logging qué biblioteca de registro usar
  • Puede hacerlo creando un archivo commons-logging.properties según estas instrucciones
  • Los pasos que desea seguir para configurar el registro commons-httpclient son
    1. Decida qué marco de registro subyacente desea usar. Hay una serie de opciones, pero probablemente log4j o java.util.logging son las mejores opciones para usted.
    2. Configure el archivo de propiedades de registro de recursos comunes para que apunte a la implementación correcta del Log . por ejemplo, para usar log4j, poner esto en el archivo de propiedades: org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger , o para usar el conjunto de registros JDK org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger . Estos también se pueden establecer como propiedades del sistema (por ejemplo, usando -D en la línea de comando).
    3. Configure la implementación de registro subyacente (por ejemplo, log4j) para ignorar los mensajes que no desea y envíe los mensajes que desea.

Esos son muchos pasos, pero eso es lo que se necesita. Los desarrolladores de Apache-commons tienden a suponer que ya tendrá configurado un marco de trabajo de registro, y pueden determinar cuál es mediante descubrimiento automático.
Si eso no es cierto para ti, entonces tiende a ser un poco más de trabajo para que todo funcione.


Simplemente agregue estas dos dependencias en el archivo pom: Lo intenté y lo logré después de probar la discusión antes.

<!--Using logback--> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>

Commons-Logging -> Logback e información predeterminada mientras Debug no estará presente; Puedes usar:

private static Logger log = LoggerFactory.getLogger(HuaweiAPI.class);

para definir la información que desea registrar: como resultado final como este. Solo la información que quiero registrar estará presente.