2010-06-11 26 views
34

這可能是一個愚蠢的問題,但我有點失去了與Java記錄儀哪裏java.util.logging.Logger中存儲自己的日誌

private static Logger logger = Logger.getLogger("order.web.OrderManager"); 
logger.info("Removed order " + id + "."); 

我在哪裏看到的日誌?同樣在此引自java.util.logging.Logger中庫:

在每個記錄調用記錄器最初執行請求電平的廉價檢查(例如重度或FINE)對記錄器的有效日誌級別。如果請求級別低於日誌級別,則日誌記錄調用立即返回。
通過這個初始(廉價)測試後,Logger將分配一個LogRecord來描述日誌消息。然後它會調用一個過濾器(如果存在)來更詳細地檢查記錄是否應該發佈。如果通過,則將LogRecord發佈到其輸出Handlers.`

這是否意味着,如果我有3個request level日誌:

logger.log(Level.FINE, "Something"); 
logger.log(Level.WARNING, "Something"); 
logger.log(Level.SEVERE, "Something"); 

而且我log level很嚴重,我可以看見三日誌,如果我的log level是WARNING,那麼我看不到SEVERE日誌,這是否正確?如何設置log level

+2

內置記錄器不是那麼好。將其替換爲log4j(http://logging.apache.org/log4j/1.2/)。在log4j網站上有一些很好的文檔解釋瞭如何使用它... – bwawok 2010-06-11 19:59:01

+0

@bwawok:這對於Apache Commons Logging來說也不是一個壞主意。如果log4j可用,它將使用log4j,如果log4j不可用,它將回退到內置日誌記錄。 – Powerlord 2010-06-11 20:02:06

+2

我不會使用公共日誌記錄。它有很多問題,並且在使用tomcat的時候很臭。如果你自己編寫代碼在log4j中。如果編碼一個庫,代碼與slf4j(http://www.slf4j.org) – bwawok 2010-06-11 20:49:56

回答

27

我在哪裏可以看到日誌?

在日誌文件或標準輸出中,具體取決於您的實際日誌處理程序配置。這可以通過屬性文件或直接通過日誌API來設置。

這是否意味着,如果我有3個請求級別日誌...

SEVERE是最重要的(最高優先級)和FINE在你的例子顯示的3箇中最重要的消息類型。因此,如果您的日誌級別爲SEVERE,則只會記錄SEVERE消息。如果級別爲FINE,則會記錄所有3條消息。

這在實際生產環境中非常有用,您可能只想記錄錯誤和可能的警告(希望 - 相當少見,但您想了解它們),因此您可以將日誌級別設置爲WARNING。但是,在您的開發環境中,例如,調試問題,即使它創建了大量的日誌數據並減慢了應用程序的速度,也希望查看日誌中的所有信息。因此,您將日誌級別設置爲FINEFINEST

這是一個很好的introduction to Java Logging

更新:從上面的網頁一個簡單的例子,在FINEST級別配置記錄到一個文件中的記錄:

Handler fh = new FileHandler("%t/wombat.log"); 
Logger.getLogger("").addHandler(fh); 
Logger.getLogger("com.wombat").setLevel(Level.FINEST); 

要登錄到控制檯,用ConsoleHandler替換FileHandler以上:

Handler ch = new ConsoleHandler(); 
Logger.getLogger("").addHandler(ch); 

這只是一個例子 - 在一個真實的應用程序中,最好通過配置屬性文件來配置日誌記錄。

+0

ohhh這是相反的方式。非常感謝你。彼得,你能告訴我如何配置日誌打印到文件或控制檯嗎? – 2010-06-11 20:00:53

+0

@哈利,看我的更新。 – 2010-06-11 20:11:06

+0

您提到在真實應用程序中,最好通過屬性文件配置日誌記錄。會友善地告訴我該怎麼做? – 2010-07-19 20:24:32

5

Java TM Logging Overview是相當有趣的回答你所有的問題在Java Logger

logging overview

你會看到你的日誌,其中與Logger關聯將產生Handler(S)表示日誌(在ConsoleStream ...)。
默認配置在根記錄器上建立一個處理程序,用於將輸出發送到控制檯。

日誌級別

每個日誌消息具有相關聯的日誌級別。該級別給出了日誌消息的重要性和緊迫性的粗略指導。日誌級別對象封裝了一個整數值,較高的值表示較高的優先級。

Level類定義了七個標準日誌級別,從FINEST(最低優先級,具有最低值)SEVERE最高優先級,具有最高值)。

1

它取決於您的配置。 API文檔中有關於此的詳細信息。日誌級別與您所說的完全相反。如果您的配置爲FINE,則會顯示一切爲FINE, WARNING, SEVERE,但是如果您將其設置爲SEVERE,那麼只有這些配置會出現。

一般而言,在調試時應使用FINE,並且在生產環境中切換到SEVERE