Estoy usando commons-httpclient 3.1 en un conjunto de pruebas de integración. El registro predeterminado para HttpClient es extremadamente ruidoso y parece que no puedo desactivarlo. He intentado seguir las instrucciones aquí, pero ninguna de ellas hace ninguna diferencia.
Principalmente solo necesito hacer que el registrador org.apache.http.wire se cierre. Parte del problema es que no sé qué tipo de registrador intenta utilizar HttpClient 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 test / resources, modificando el archivo master logging.properties en jre / lib y enviando las diversas opciones de registro a Maven como se especifica en la página de registro , 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 está originando a través del uso de jwebunit de HttpClient, no el mío. De cualquier manera, no es deseable.
ACTUALIZACIÓN: Gracias por los intentos hasta ahora. He intentado 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 el siguiente contenido
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 ejecuto 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 se encuentra en el cable está haciendo que esta biblioteca sea inutilizable para mí ... eso es hasta que pueda descubrir cómo apagarla. ¿Hay algo especial que deba hacer para leer esta configuración de registro?
fuente
-Dlog4j.debug
a sus opciones de VM para asegurarse de que se carga el archivo de configuración correctopublic class Main { static { System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); } // Rest of class as before }
Respuestas:
Actualización
log4j.properties
para incluir: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:Ajuste del nivel de registro a
WARN
la Log4J usando el nombre del paqueteorg.apache.commons.httpclient
enlog4j.properties
no funcionará como se espera:Esto se debe a que la fuente de HttpClient (v3.1) usa los siguientes nombres de registro:
fuente
Nota: Parte de esta respuesta puede repetir cosas que ya sabe (o cree que sabe), pero hay un poco de información errónea flotando sobre esta pregunta, por lo que comenzaré por el principio y lo explicaré todo
java.util.logging
(registro JDK1.4)java.util.logging
)log4j.jar
al classpath hará que cambie el mecanismo de registro que usa, que probablemente no sea lo que deseacommons-logging.properties
archivo según estas instruccioneslog4j
ojava.util.logging
sean las mejores opciones para usted.Log
implementación correcta . por ejemplo, para usar log4j, coloque esto en el archivo de propiedades:org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
o para usar el conjunto de registros JDKorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
. También se pueden establecer como propiedades del sistema (por ejemplo,-D
en la línea de comando).Son muchos pasos, pero eso es lo que se necesita. Los desarrolladores de Apache-commons tienden a suponer que ya tendrá un marco de registro configurado, y pueden determinar cuál es mediante autodescubrimiento.
Si eso no es cierto para usted, entonces se necesita un poco más de trabajo para que todo funcione.
fuente
Puse esto en mi archivo de configuración log4j
Esto limita la salida al nivel de Advertencia o superior
fuente
Esto funcionó para mis pruebas;
fuente
Para log4j, agregue lo siguiente a
log4j.properties
(en elsource
directorio de la aplicación ):Para el inicio de sesión, lo siguiente
logback.xml
matará el ruido:fuente
Tomó demasiado tiempo descubrir esto, pero JWebUnit viene incluido con el componente de registro Logback , por lo que ni siquiera usará
log4j.properties
ocommons-logging.properties
.En su lugar, cree un archivo llamado
logback.xml
y colóquelo en su carpeta de código fuente (en mi casosrc
):El inicio de sesión parece estar todavía en desarrollo y la API parece estar cambiando, por lo que este ejemplo de código puede fallar en el futuro. Vea también esta pregunta de StackOverflow .
fuente
Tuve este problema al usar RestAssured con JUnit. Para mí, este enfoque programático funcionó:
fuente
@Before
o@BeforeClass
función funcionó maravillosamente.Utilizamos XML, en lugar de un archivo de propiedades, para configurar nuestra salida de registro. El siguiente código funcionó para silenciar esta charla.
fuente
En su log4.properties: ¿tiene este conjunto como lo hago a continuación y no hay otros
org.apache.http
registradores establecidos en el archivo?Además, si no tiene ningún nivel de registro especificado
org.apache.http
en su archivo de propiedades log4j, heredará ellog4j.rootLogger
nivel. Entonces, si se halog4j.rootLogger
configurado para decir ERROR y eliminar laorg.apache.http
configuración en sus propiedades log4j.que debería hacer que solo registreERROR
mensajes solo por herencia.ACTUALIZAR:
Cree un
commons-logging.properties
archivo y agregue la siguiente línea. También asegúrese de que este archivo esté en su CLASSPATH.Se agregó un archivo log4j completo y el código para invocarlo para el OP. Este log4j.properties debe estar en su CLASSPATH. Estoy asumiendo stdout por el momento.
Aquí hay un código que debe agregar a su clase para invocar al registrador.
fuente
Manera simple Log4j y HttpCLient (v3.1 en este caso, debería funcionar para versiones superiores, podría requerir cambios menores)
¡Asegúrese de que todas las dependencias sean correctas, y MD5 sus descargas!
fuente
main
método?He estado plagado por el mismo problema desde hace bastante tiempo y finalmente decidí investigarlo. Resultó que el problema es que mi proyecto tenía una dependencia en http-builder-0.5.2.jar que agrupaba un archivo log4j.xml dentro de sí mismo. Y, efectivamente, ¡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 grepping para log4j.
Si bien este descubrimiento condujo a la solución eventual de aumentar la versión de mi dependencia de http-builder a 0.6, todavía 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 era útil mencionar esta solución que encontré dado que cuando estaba buscando una solución antes, la mía nunca apareció. Esperemos que alguien encuentre esto útil.
fuente
<!-- https://mvnrepository.com/artifact/com.fredericboisguerin.excel/excel-reader-writer --> <dependency> <groupId>com.fredericboisguerin.excel</groupId> <artifactId>excel-reader-writer</artifactId> <version>2.1</version> </dependency>
. Se eliminó la dependencia y los registros desaparecieron. ¡Gracias!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:
Probablemente no tenga que eliminar los frascos de Logback, pero necesitará algún paso adicional para forzar a slf4j a usar log4j
fuente
Las siguientes 2 líneas resolvieron mi problema por completo:
fuente
Agregue las líneas siguientes en el archivo de propiedad log4j y cerrará los registros http: - log4j.logger.org.apache.http = OFF
fuente
@BeforeClass public static void BeforeClass() { PropertyConfigurator.configure("log4j.properties"); ...}
archivo log4j.properties con la línea única log4j.logger.org.apache.http = OFF debe estar en la raíz (justo arriba de la carpeta src)También estaba teniendo el mismo problema. Toda la consola estaba llena de
[main] DEBUG org.apache.http.wire
mientras se ejecutaban las pruebas.La solución que funcionó para mí fue crear un logback-test.xml src / test / resources / logback-test.xml como en https://github.com/bonigarcia/webdrivermanager-examples/blob/master/src/test/resources /logback-test.xml (ref - https://github.com/bonigarcia/webdrivermanager/issues/203 )
Para ver mi información de registro, reemplacé logger name = "io.github.bonigarcia" con el nombre de mi paquete
fuente
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 el registro de httpClient sin demasiada configuración. Como no estábamos seguros de qué implementación de registro debajo del registro común se usó, mi solución fue forzarlo usando log4j lanzando el archivo jar log4j en la ruta de clase. La configuración predeterminada de la configuración de log4j cierra la salida de depuración de cliente común-http. Por supuesto, para hacerlo más robusto, puede crear archivos common-logging.properties y log4j.properties para definir aún más sus configuraciones de registro.
fuente
Intenta poner
en su commons-logging.properties
fuente
Para apache 4.5.3, si desea mover el nivel de todos los registros del cliente http apache a Warn , use:
fuente
es trabajo para mí con agregar "logback.xml" en la ruta raíz de la clase y debajo de la configuración.
fuente
Tuve el mismo problema al ejecutar pruebas de integración de jwebunit. Lo arreglé excluyendo el inicio de sesión y agregando slf4j-log4j12, así:
fuente
Esto me llevó años descubrirlo una vez, necesitas esto:
Supongo que HttpClient usa "httpclient.wire" como su nombre de registrador, no "org.apache.commons.httpclient".
Mocosos astutos.
fuente
Esto funcionó para mí.
fuente
La mejor solución que encontré fue usar el complemento maven enforcer para evitar que se utilicen por completo los registros comunes. Luego agregué la dependencia slf4j para iniciar sesión en su lugar. Entonces agregue lo siguiente a su pom.xml
y también agregue el complemento maven-enforcer
fuente
Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M2:enforce (enforce) on project gs-serving-web-content: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed
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.
fuente
Simplemente agregue estas dos dependencias en el archivo pom: lo he intentado y tengo éxito después de intentar la discusión anterior.
Commons-Logging -> Logback e información predeterminada, mientras que Debug no estará presente; Puedes usar:
para definir la información que desea registrar: como Resultado Final como este. Solo la información que quiero registrar estará presente.
fuente
Intenté todas las soluciones anteriores en vano. La única opción que se me acercó más fue la que sugirió crear un logback.xml. Eso funcionó, sin embargo, nada se registró. Después de jugar con el logback.xml, esto es lo que terminé con
Ahora todos los niveles por debajo de DEBUG se registran correctamente.
fuente
Con:
Se puede agregar:
Con 'httpclient' en el ejemplo anterior es un nombre lógico que eliges.
(Probado en la aplicación Java 11 OpenFX).
fuente
En mi caso, uso la configuración xml, y agrego esto al archivo de configuración
fuente
Pruebe 'log4j.logger.org.apache.http.headers = ERROR'
fuente
Para mí, las siguientes líneas en el archivo log4j prop limpiaron todo el desorden que vino del registro de HttpClient ... ¡Hurra! :)
fuente