2016-12-02 77 views
1

我試過硒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 

任何線索來解決呢?

+0

這是個問題,爲什麼? – JeffC

+0

當日志一直到來,,,和另一個實例正在進行相同的代碼調用....它確實需要內存......並且從長遠來看,這將是一個memoy泄漏,不會@JeffC? – gumuruh

回答

2

您必須將記錄器固定在內存中或設置logging.properties配置文件。來自java.util.logging.Logger文檔:

記錄器對象可以通過調用其中一個getLogger工廠方法獲得。這些將創建一個新的記錄器或返回一個合適的現有記錄器。需要注意的是,如果沒有保存對Logger的強引用,任何時候getLogger工廠方法返回的Logger都可能被垃圾回收。

當新記錄器返回時,日誌級別由LogManager決定,默認情況下使用logging.properties文件中的設置。在您的示例中,可以看到以下內容:

  1. 調用getLogger將創建一個新的記錄器並從LogManager中設置級別。
  2. 您的代碼將記錄器級別設置爲OFF。
  3. G.C.運行並破壞您的記錄器以及您剛剛應用的設置。
  4. 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); 
    } 
} 
+0

有什麼區別?我的意思是,我還將記錄器設置爲上述代碼的「OFF」級別....? @jmehreris,我剛剛看到靜態變量爲不同的 – gumuruh

+0

@gumuruh靜態引用是一個硬引用[阻止垃圾回收器](https://docs.oracle.com/javase/8/docs/api/java /lang/ref/WeakReference.html)。如果允許點#3發生,就好像你從未將電平設置爲OFF。 – jmehrens