Ho provato il Selenium 3.0.1 con Firefox 48.
E ho già provato il seguente codice:
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).;
ma una volta che ho eseguito i soliti test su Netbeans , … i log sono ancora in uscita:
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
Qualche idea per risolvere questo?
Devi mettere i tuoi logger in memoria o configurare un file di configurazione logging.properties
. Dai documenti java.util.logging.Logger :
Gli oggetti di logger possono essere ottenuti tramite chiamate su uno dei metodi di fabbrica di getLogger. Questi creeranno un nuovo Logger o restituiranno un Logger esistente idoneo. È importante notare che il logger restituito da uno dei metodi factory getLogger può essere garbage collection in qualsiasi momento se non viene mantenuto un forte riferimento al Logger.
Quando viene restituito un nuovo logger, il livello di log è determinato da LogManager che, per impostazione predefinita, utilizza le impostazioni da un file logging.properties
. Nel tuo esempio, è ansible vedere quanto segue:
Ecco un esempio di test per dimostrare il punto:
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(); } }
Quale emetterà null
invece di OFF
.
Se si blocca il logger mantenendo un riferimento forte, il passaggio n. 3 non avviene mai e Selenium dovrebbe invece trovare il registratore creato che ha il livello impostato su 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); } }