簡體   English   中英

在Java中跨類實現Logger的標准方法?

[英]Standard way to implement a Logger across classes in Java?

我正在構建一個包含許多類的Javafx應用程序。 我想從所有類中使用java日志記錄。 但是所有選項似乎都帶有過多或重復的代碼。 這些是我能想到的:

  1. 將Logger聲明為每個類中的私有靜態final字段,即

    private static final Logger LOGGER = Logger.getLogger(MyClass.class.getName());

這個選項似乎有點煩人,必須在每個班級都這樣做。

  1. 將Logger從主類傳遞給每個構造函數

再次似乎並不優雅

  1. 為記錄器創建一個類,然后為每個日志項調用該類的靜態方法。 似乎只為記錄器創建一個額外的類是過多的。

那你們怎么處理這種情況呢? 這只是選擇最不好選擇的問題嗎?

選項1與選項3相結合(就像人們提到的使用類似slf4j的包裝器)將允許在實現之間進行切換被廣泛使用。

declare Logger as a private static final field in each class i.e.

private static final Logger LOGGER = Logger.getLogger(MyClass.class.getName());

聲明一個記錄器並不是什么大問題,你應該能夠在IDE中定義一個新的類模板,它自動生成記錄器代碼。

我不同意第三種選擇的“過度”:“包裝”選項實際上相當優雅,因為它有一個專用的記錄器類( SRP ),它允許你切換實現( log4japache-commons-loggingjava。 util.logging etc)“引擎蓋下”沒有將其余代碼耦合到該實現。

正如Luiggi在下面的評論中提到的那樣, SLF4J就是這樣的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM