2016-02-22 37 views
-1

我伸出我繼承有使用類Log它包裝java.util.logging.Logger記錄實施的Java項目的功能後:沒有看到任何Java日誌創建對象

import java.util.logging.*; 

public class Log { 

    // ... 
    private final Logger log; 

我集成第三方庫而我遇到的問題是在我從這個庫創建一個類的對象之後,所有的日誌都停止了。或者,更準確地說,我在System.err中看不到任何日誌消息。因此,在下面的塊創建SomeClass類的一個對象:

public class TopClass { 

    private static final Log log = new Log(TopClass.class); 

    // ... 

    private static SomeClass foo = null; 

    // ... 

    public static void main(String[] args) { 

     // ... 
     log.severe("SEVERE-BEFORE"); 
     log.info("INFO-BEFORE"); 
     foo = new SomeClass(); 
     log.severe("SEVERE-AFTER"); 
     log.info("INFO-AFTER"); 

我可以看到SEVERE-BEFOREINFO-BEFORE但不SEVERE-AFTERINFO-AFTER

如何計算在foo的初始化期間記錄會發生什麼情況?我可以訪問SomeClass庫的一些源代碼,並且我搜索了任何提及的「日誌」,但沒有找到任何。該庫確實有幾個System.err.priteln()調用。該庫也依賴於其他庫,我無法訪問其源的其他庫。

回答

1

有可能構造函數SomeClass引發異常。 嘗試將您的代碼包裝在try-catch中。

喜歡的東西:

public static void main(String[] args) { 

     // ... 
     log.severe("SEVERE-BEFORE"); 
     log.info("INFO-BEFORE"); 
     try 
     { 
      foo = new SomeClass(); 
     } 
     catch (Throwable t) 
     { 
      log.severe("an exception was thrown", t); 
     } 
     log.severe("SEVERE-AFTER"); 
     log.info("INFO-AFTER"); 
+0

沒有,實例工作正常。在log.info(「INFO-AFTER」)後面有更多的代碼;'指向'log.info()'或'log.severe()'等都不會在'System.err ' –

+0

有趣。如何嘗試沿着這個問題的答案使用的東西: http://stackoverflow.com/questions/14024733/retrieve-list-of-log4j-appenders-at-run-time 並在實例化之前和之後打印所有appender ? –

+0

我沒有在我的項目中使用log4j,但我可能會切換到它,也許問題會消失... –