簡體   English   中英

哪個是在java中聲明記錄器變量的最佳方法

[英]Which is the best way to declare logger variable in java

我只是想知道在 java 中聲明記錄器變量的最佳方式是什么。 以下是一些聲明。

1> private static final Logger logger = Logger.getLogger(ServiceImpl.class);

2> private static Logger logger = Logger.getLogger(ServiceImpl.class);

3> private static final Logger LOGGER= Logger.getLogger(ServiceImpl.class);

4> private static Logger LOGGER= Logger.getLogger(ServiceImpl.class);

PS,如果有人知道聲明 looger 變量的另一種最佳替代方法,我真的很感激。

所有大寫變量名都是 IMO,因為您實際上不是在聲明/定義常量而是靜態變量。 大寫名稱更適合“常量”。 也就是說,我個人會采用第一種方法。

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

我投3

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

它是final因為你沒有改變它,它是大寫的,因為它是一個常數。

我個人認為private static final Logger LOGGER= Logger.getLogger(ServiceImpl.class); 是出於語義和性能原因的最佳方法:

  • 您的 Log 屬於該類而不屬於它的各種實例,因此您應該將其設為靜態
  • 它應該是私有的,因為它是由類在內部使用的,它不是它的公共 API 的一部分
  • 將其設為最后兩個是有道理的,首先是因為這表明引用不會改變(這里就是這種情況),其次是因為編譯器和 JIT 可以更好地優化最終實例變量(尤其是靜態變量)以提高速度(更多詳情在這里
  • 將其全部命名為大寫實際上只是一個很好的約定,這就是在 Java 中聲明靜態變量的方式,這不是必須的,但它使代碼更具可讀性

我會選擇第一個選項,但我想這是個人選擇的問題。

我建議不要在每個類中都使用這樣的變量,而是將這項工作委托給jcabi-log 中圍繞 slf4j 的靜態實用程序包裝器:

Logger.debug(this, "some variable = %s", value);

也檢查這篇文章: http : //www.yegor256.com/2014/05/23/avoid-java-static-logger.html

在特定類的所有實例之間共享單個記錄器對象並在程序運行期間使用相同的記錄器是一種很好的編程習慣,因此我們對記錄器使用staticfinal

不建議使用多個記錄器(糟糕的記錄實踐)而不是記錄級別。

我覺得

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

是更好的選擇。

這里沒有人使用LOGlog嗎? 我發現它在實踐中更好。 (當然,我不是第一個在標准的地方工作的人,因為 Lombok 中的@Log4j也會生成一個log字段。當然它也是靜態最終的。順便說一句,這是聲明該字段的最佳方式。 .. 添加@Log4j注釋。完成。)

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

其中 logger 是最終的,已解決的變量應以大寫形式定義。 雖然 getLogger() 靜態方法需要 String 作為參數,但類名也應該調用類的 .getName() 。

@Slf4j 注釋可以幫助解決這個問題。

import lombok.extern.slf4j.Slf4j;
@Slf4j
public class CustomClassName {
 void customMethod(){
  log.info("Shorthand logger annotation example");
 }
}

第一個是最好的。我更喜歡記錄器是finalstatic ......

在我對 java 風格指南的理解中,'logger' 是最好的。 'LOGGER' 將用於定義的常量。

此外,使用“final”應該會使其更快一些。

因此#1。

暫無
暫無

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

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