2011-03-03 17 views
13

Estoy usando HtmlUnit para interactuar con una página web que interactúa con el servidor a través de Ajax. Poco después el código Ajax comienza, HtmlUnit produce estos mensajes de registro de dos:No se pueden desactivar los mensajes de registro de HtmlUnit

WARNING: Ignoring XMLHttpRequest.setRequestHeader for Content-length: it is a restricted header 
Mar 3, 2011 3:32:47 PM com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest jsxFunction_setRequestHeader 
WARNING: Ignoring XMLHttpRequest.setRequestHeader for Connection: it is a restricted header 
Mar 3, 2011 3:32:47 PM com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest jsxGet_status

... Seguido de este mensaje, repetido seis veces:

SEVERE: XMLHttpRequest.status was retrieved before the response was available. 
Mar 3, 2011 3:32:47 PM com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest jsxGet_status

no puedo encontrar la manera de convertir estas mensajes desactivados Navegando a través del código muestra que se producen mediante llamadas directas a un registrador, no a través de un objeto de controlador que podría proporcionar una implementación de no hacer nada, como ya hago para los errores de CSS. El HtmlUnit logging page indica que la adición de este código debería funcionar:

System.getProperties().put("org.apache.commons.logging.simplelog.defaultlog", "fatal"); 

... pero no tiene ningún efecto. También intenté agregar la siguiente opción donde invoco java:

-Dorg.apache.commons.logging.simplelog.defaultlog=fatal 

... pero eso tampoco tiene ningún efecto.

Supongo que podría redirigir stderr a/dev/null mientras se ejecuta este código, pero ¿hay soluciones menos hacky disponibles?

+0

Posible duplicado de [Desactivación de las advertencias de HtmlUnit] (http://stackoverflow.com/questions/3600557/turning-htmlunit-warnings-off) –

Respuesta

13

Yo también tuve problemas con esto .. La respuesta depende de qué sistema de registro común de registro está utilizando debajo del capó. (ya que el registro común es solo un contenedor). Consulte los siguientes http://commons.apache.org/proper/commons-logging/guide.html#Configuring_The_Underlying_Logging_System

El atributo que menciona arriba (org.apache.commons.logging.simplelog.defaultlog) solo debe ser válido si se utiliza el registrador simple. Sin embargo, si está ejecutando en JDK 1.4 o superior, debe usar el registro JDK de manera predeterminada. En cuyo caso se usa de forma predeterminada el uso de lib/logging.properties desde la ubicación de instalación de JRE.

En mi caso tenía Log4j en el classpath, por lo que de manera predeterminada.

Para quitar la aleatoriedad de todo esto, puede configurar explícitamente el registrador usted mismo. Cree un archivo commons-logging.properties en classpath y pase el registrador para usar, p.

# JDK Logging 
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger 
# Log4j logging (also required log4j.jar to be in classpath) 
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger 

Para log4j, agregando lo siguiente, log4j.properties detiene las advertencias de HtmlUnit.

log4j.logger.com.gargoylesoftware.htmlunit=ERROR 
9

Trate de poner esto en su código:

LogManager.getLogManager().reset(); 
1

Try escribiendo su propio archivo log4j config, y haciendo HtmlUnit lo uso con la opción de Java:

-Dlog4j.configuration=file:///my/conf/log4j.properties

Entonces en su log4j.properties:

log4j.logger.com.gargoylesoftware.htmlunit=error 
10

También puede utilizar:

org.apache.log4j.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(org.apache.log4j.Level.FATAL); 
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.SEVERE); 
+0

Para mí, eso es lo único entre la gran cantidad de pruebas realizadas que despejan el consola ..... Es casi pacífico –

2

estoy usando HtmlUnit 2.13, y el siguiente código está trabajando para trunoff advertencias.

LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); 
    java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF); 
    java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF); 
2

Añadir esto en su código: LogFactory.getFactory() setAttribute ("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog."); java.util.logging.Logger.getLogger ("com.gargoylesoftware.htmlunit"). setLevel (Level.OFF); java.util.logging.Logger.getLogger ("org.apache.commons.httpclient"). setLevel (Level.OFF); java.util.logging.Logger.getLogger ("org.apache.http.client.protocol.ResponseProcessCookies"). setLevel (Level.OFF);

La última línea desactivará la mayoría de los registros que están sucediendo debido a que las Cookies son aceptadas o rechazadas en el sitio de destino.

+0

Solución sucia, pero funcionó muy bien, gracias! – PizzaFrog

Cuestiones relacionadas