我想在我的程序中使用日誌。我聽說java.util.logging,但我不知道如何開始。使用java.util.logging的好例子
是否有任何我可以使用日誌記錄做的例子?我如何在自己的程序中使用日誌記錄?
我想在我的程序中使用日誌。我聽說java.util.logging,但我不知道如何開始。使用java.util.logging的好例子
是否有任何我可以使用日誌記錄做的例子?我如何在自己的程序中使用日誌記錄?
有很多例子,也有不同類型的日誌記錄。看看java.util.logging包。
示例代碼:
import java.util.logging.Logger;
public class Main {
private static Logger LOGGER = Logger.getLogger("InfoLogging");
public static void main(String[] args) {
LOGGER.info("Logging an INFO-level message");
}
}
沒有硬編碼class name:
import java.util.logging.Logger;
public class Main {
private static final Logger LOGGER = Logger.getLogger(
Thread.currentThread().getStackTrace()[0].getClassName());
public static void main(String[] args) {
LOGGER.info("Logging an INFO-level message");
}
}
爲什麼不把日誌名稱設置爲'Main.class.getSimpleName()'?這種方式重構工具將根據需要正確地進行更改,但它不像第二種解決方案那樣笨重。 – Pijusn 2013-03-06 08:56:35
「笨重」是什麼意思,爲什麼你認爲它笨重?第二種解決方案將與所有重構工具一起工作(因爲類名是派生的)。另請參閱:http://stackoverflow.com/a/5271343/59087 – 2013-03-12 03:34:01
爲記錄器名稱執行堆棧跟蹤是破解,緩慢和非正統的。它也會打破AOP代理或其他異常編碼的怪異名稱。 – 2013-08-04 01:45:11
SLF4J是比Apache Commons Logging(ACL)更好的測井外觀。它與其他日誌框架建立了橋樑,通過SLF4J直接調用ACL,Log4J或Java Util日誌記錄,以便您可以根據需要將所有輸出定向到一個日誌文件,只需一個日誌配置文件。爲什麼你的應用程序會使用多個日誌框架?由於您使用的第三方庫,特別是較舊的庫,可能會這樣做。
SLF4J支持各種日誌記錄實現。它可以將所有內容輸出到標準輸出,使用Log4J或Logback(推薦使用Log4J)。
應申報記錄器這樣的。
我寫了一篇關於java記錄器的文章,內容是examples here。
java.util.logging
讓您無需再攜帶一個jar文件與您的應用程序,並且它可以很好地與格式化程序配合使用。
一般來說,在每堂課的頂部,你應該有:
private static final Logger LOGGER = Logger.getLogger(ClassName.class.getName());
然後,您可以只使用Logger類的各種設施。
使用Level.FINE
這通常就是調試在執行流程的頂層:
LOGGER.log(Level.FINE, "processing {0} entries in loop", list.size());
使用Level.FINER
/Level.FINEST
循環的內部和地方,你可能不調試基本流程問題時總是需要詳細瞭解:
LOGGER.log(Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) });
使用日誌記錄工具的參數化版本來防止產生噸GC需要跟蹤的字符串串聯垃圾。如上所述的Object[]
便宜,通常在堆棧分配上。
有了異常處理,隨時登錄完整的異常詳細信息:
try {
...something that can throw an ignorable exception
} catch(Exception ex) {
LOGGER.log(Level.SEVERE, ex.toString(), ex);
}
我總是傳遞ex.toString()
這裏的消息,因爲當我「grep -n
」爲「Exception
」在日誌文件中,我也可以看到消息。否則,它將位於堆棧轉儲生成的下一行輸出中,並且您必須具有更高級的RegEx才能與該行匹配,這往往會讓您獲得比您需要查看更多的輸出。
這是寫入某種文件嗎?我無法在我的程序中使用它。我有你的第一行,但目前爲止沒有任何工作。 – 2014-05-12 13:12:52
如何查看日誌?我正在使用的庫初始化Logger對象並使用'.fine()'方法進行日誌記錄,但似乎無法顯示消息... – 2015-02-04 08:47:58
自1998年以來,我一直使用Java進行編程。發現使用Java進行日誌記錄比其需要更令人頭疼。 這是迄今爲止最直接的解釋如何登錄我讀過的Java。簡潔。 – 2015-02-17 05:38:05
你可以從這裏開始:http://slf4j.org/manual.html – Jeremy 2011-05-10 13:14:28
雖然這個問題是堆棧溢出的話題,但它對很多人來說顯然是有幫助的。是否有另一個SE網站可以提供這樣的問題? – 2017-05-25 21:21:46