Не удается отключить сообщения журнала HtmlUnit - PullRequest
14 голосов
/ 04 марта 2011

Я использую HtmlUnit для взаимодействия с веб-страницей, которая взаимодействует с сервером через Ajax. Вскоре после запуска Ajax-кода 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

... После этого сообщения повторяется шесть раз:

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

Я не могу понять, как отключить эти сообщения. Обход кода показывает, что они создаются прямыми вызовами регистратора, а не через объект-обработчик, для которого я мог бы обеспечить реализацию бездействия, как я уже делал для ошибок CSS. Страница HtmlUnit указывает, что добавление этого кода должно работать:

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

... но это не имеет никакого эффекта. Я также попытался добавить следующую опцию, где я вызываю Java:

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

... но это также не имеет никакого эффекта.

Полагаю, я мог бы перенаправить stderr в / dev / null во время выполнения этого кода, но есть ли менее хакерские решения?

Ответы [ 6 ]

13 голосов
/ 26 апреля 2011

У меня тоже были проблемы с этим .. Ответ зависит от того, какую систему ведения журналов использует система общего доступа. (так как обычное ведение журнала это просто оболочка). Смотрите следующее http://commons.apache.org/proper/commons-logging/guide.html#Configuring_The_Underlying_Logging_System

Атрибут, который вы упомянули выше (org.apache.commons.logging.simplelog.defaultlog), должен быть действительным, только если используется простой регистратор. Если вы работаете на JDK 1.4 или выше, по умолчанию следует использовать ведение журнала JDK. В этом случае по умолчанию используется lib / logging.properties из места установки JRE.

В моем случае у меня был Log4j в пути к классам, поэтому он по умолчанию соответствовал этому.

Чтобы убрать случайность всего этого, вы можете явно установить Logger самостоятельно. Создайте файл commons-logging.properties в пути к классам и передайте в регистратор, например,

# 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

Для log4j добавление следующего log4j.properties останавливает предупреждения от HtmlUnit.

log4j.logger.com.gargoylesoftware.htmlunit=ERROR
11 голосов
/ 26 ноября 2012

Вы также можете использовать:

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);
9 голосов
/ 21 января 2012

Попробуйте вставить это в свой код:

LogManager.getLogManager().reset();
3 голосов
/ 22 мая 2014

Добавьте это в свой код:

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

В последней строке будет отключено большинство журналов, которые происходят из-за того, что файлы cookie принимаются или отклоняются на целевом сайте.

2 голосов
/ 23 декабря 2013

Я использую Htmlunit 2.13, и следующий код работает для предупреждения trunoff.

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);
1 голос
/ 02 марта 2012

Попробуйте написать свой собственный файл конфигурации log4j и заставить htmlunit использовать его с опцией java:

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

Затем в вашем log4j.properties:

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