Java 定義一個日誌的時候應該如何定義

  • 2020 年 2 月 26 日
  • 筆記

在很多情況下,我們都會使用 SLF4J 來定義日誌。

那麼如何定義一個 Logger 呢?

相信絕大部分人都會定義為:

private static final Logger logger = LoggerFactory.getLogger(BigDecimalDemoUnitTest.class);

但是我們為什麼要使用 private static final 來進行修飾呢?

  • private – 沒有其他類可以劫持你的日誌
  • static – 因為使用了靜態,所以每一個類就只有一個日誌,同時可以避免嘗試序列化日誌
  • final – 在類的生命周期中,不需要修改日誌

同時,你可以定義變數 log 來替代 logger,這樣能夠減少輸入的字元數。當然這個也需要根據你的項目要求來定了。

當然還有下面的一種情況,考察日誌程式碼:

protected final Logger log = LoggerFactory.getLogger(getClass());

上面有關日誌的定義與我們的規則是完全相反的。

上面的程式碼允許你在所有具有繼承關係的類中使用相同的日誌名(與實際的類名相同)。

例如:

如果類 Bar Extends Foo,那麼上面 2 個類的日誌將會 log 到 Bar logger 中。