Selenium много журналов (как удалить)
Я попробовал Selenium 3.0.1 с Firefox 48.
И я уже попробовал следующий код:
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(ProtocolHandshake.class.getName()) setLevel(Level.OFF).
но как только я запускаю обычное тестирование под Netbeans,... журналы все равно выходят:
Dec 02, 2016 9:17:53 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Attempting bi-dialect session, assuming Postel's Law holds true on the remote end
Dec 02, 2016 9:17:57 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
Любой ключ для решения этой проблемы?
1 ответ
Вы должны закрепить свои регистраторы в памяти или настроить logging.properties
Конфигурационный файл Из документации java.util.logging.Logger:
Объекты логгера могут быть получены вызовами одного из фабричных методов getLogger. Они либо создадут новый Logger, либо вернут подходящий существующий Logger. Важно отметить, что Logger, возвращенный одним из фабричных методов getLogger, может быть в любое время собран мусором, если не сохранить строгую ссылку на Logger.
Когда возвращается новый регистратор, уровень журнала определяется LogManager, который по умолчанию использует настройки из logging.properties
файл. В вашем примере можно увидеть следующее:
- Вызов getLogger создает новый регистратор и устанавливает уровень из LogManager.
- Ваш код устанавливает уровень логгера на OFF.
- GC запускает и уничтожает ваш логгер вместе с настройками, которые вы только что применили.
- Selenium вызывает getLogger, создает новый регистратор и устанавливает уровень из LogManager.
Вот пример тестового примера, чтобы доказать это:
public static void main(String[] args) {
String name = "com.gargoylesoftware.htmlunit";
for (int i = 0; i < 5; i++) {
System.out.println(Logger.getLogger(name).getLevel());
Logger.getLogger(name).setLevel(Level.OFF);
System.runFinalization();
System.gc();
System.runFinalization();
Thread.yield();
}
}
Который будет выводить null
вместо OFF
,
Если вы закрепите свой регистратор, удерживая сильную ссылку, то шаг № 3 никогда не произойдет, и вместо этого Selenium должен найти созданный вами регистратор, для которого установлен уровень OFF.
private static final Logger[] pin;
static {
pin = new Logger[]{
Logger.getLogger("com.gargoylesoftware.htmlunit"),
Logger.getLogger("org.apache.commons.httpclient"),
Logger.getLogger("org.openqa.selenium.remote.ProtocolHandshake")
};
for (Logger l : pin) {
l.setLevel(Level.OFF);
}
}