@Log (以及相關功能)
艦長日誌,星曆 24435.7:「那句台詞是怎麼說的來著?」
各種 @Log
變體是在 lombok v0.10 中新增的。lombok 0.10 新功能:您可以使用日誌註解來註解任何類別,讓 lombok 產生一個 logger 欄位。
logger 名稱為 log
,欄位類型取決於您選擇的 logger。
lombok v1.16.24 新功能:新增 google 的 FluentLogger(透過 @Flogger
)。
lombok v1.18.10 新功能:新增 @CustomLog
,讓您透過設定組態金鑰來新增任何 logger,以設定如何建立它們。
概觀
您將 @Log
的變體放在您的類別上(無論哪一個適用於您使用的日誌系統);然後您就有一個靜態 final log
欄位,依照您使用的日誌框架的常用規定方式初始化,然後您可以使用它來寫入日誌陳述式。
有幾種選擇可用
-
@CommonsLog
- 建立
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
-
@Flogger
- 建立
private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass();
-
@JBossLog
- 建立
private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
-
@Log
- 建立
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
-
@Log4j
- 建立
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
-
@Log4j2
- 建立
private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
-
@Slf4j
- 建立
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
-
@XSlf4j
- 建立
private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
-
@CustomLog
- 建立
private static final com.foo.your.Logger log = com.foo.your.LoggerFactory.createYourLogger(LogExample.class);
此選項需要您在
lombok.config
檔案中新增組態,以指定@CustomLog
應執行的操作。例如:
lombok.log.custom.declaration = com.foo.your.Logger com.foo.your.LoggerFactory.createYourLog(TYPE)(TOPIC)
將產生上述陳述式。首先是 logger 的類型,然後是空格,然後是 logger 工廠的類型,然後是點,然後是 logger 工廠方法的名稱,然後是 1 個或 2 個參數定義;最多一個具有TOPIC
的定義,以及最多一個沒有TOPIC
的定義。每個參數定義都指定為括號括住的逗號分隔的參數種類列表。選項為:TYPE
(傳遞此@Log
修飾的類型,作為類別)、NAME
(傳遞此@Log
修飾的類型的完整名稱)、TOPIC
(傳遞在@CustomLog
註解上明確選擇的主題字串),以及NULL
(傳遞null
)。logger 類型是選填的;如果省略,則使用 logger 工廠類型。(因此,如果您的 logger 類別具有建立 logger 的靜態方法,您可以縮短您的 logger 定義)。
如果有一個公開、開放原始碼、且相當常用的日誌框架,而我們尚未為其提供明確的註解,請聯絡我們。
@CustomLog
的主要目的是支援您內部的、私有的日誌框架。
預設情況下,logger 的主題(或名稱)將是使用 @Log
註解的類別的(名稱)。這可以透過指定 topic
參數來自訂。例如:@XSlf4j(topic="reporting")
。
使用 Lombok
import lombok.extern.java.Log;
|
原生 Java
public class LogExample {
|
支援的組態金鑰
-
lombok.log.fieldName
= 識別符(預設值:log
)。 - 產生的 logger 欄位名稱預設為 '
log
',但您可以使用此設定將其更改為不同的名稱。 -
lombok.log.fieldIsStatic
= [true
|false
](預設值:true) - 通常,產生的 logger 是
static
欄位。將此金鑰設定為false
,產生的欄位將會是一個實例欄位。 -
lombok.log.custom.declaration
= LoggerType LoggerFactoryType.loggerFactoryMethod(loggerFactoryMethodParams)(loggerFactoryMethodParams) - 設定使用
@CustomLog
時要產生的內容。(斜體部分是選填的)。loggerFactoryMethodParams 是逗號分隔的參數種類列表,數量從零到任意數量皆可。有效種類:TYPE、NAME、TOPIC 和 NULL。您可以包含一個參數定義,用於未設定明確主題的情況(請勿在參數列表中包含 TOPIC),以及用於設定明確主題的情況(請在參數列表中包含 TOPIC 參數)。 -
lombok.log.flagUsage
= [warning
|error
](預設值:未設定) - 如果已設定,Lombok 會將任何日誌註解的使用標記為警告或錯誤。
-
lombok.log.custom.flagUsage
= [warning
|error
](預設值:未設定) - 如果已設定,Lombok 會將任何
@lombok.CustomLog
的使用標記為警告或錯誤。 -
lombok.log.apacheCommons.flagUsage
= [warning
|error
](預設值:未設定) - 如果已設定,Lombok 會將任何
@lombok.extern.apachecommons.CommonsLog
的使用標記為警告或錯誤。 -
lombok.log.flogger.flagUsage
= [warning
|error
](預設值:未設定) - 如果已設定,Lombok 會將任何
@lombok.extern.flogger.Flogger
的使用標記為警告或錯誤。 -
lombok.log.jbosslog.flagUsage
= [warning
|error
](預設值:未設定) - 如果已設定,Lombok 會將任何
@lombok.extern.jbosslog.JBossLog
的使用標記為警告或錯誤。 -
lombok.log.javaUtilLogging.flagUsage
= [warning
|error
](預設值:未設定) - 如果已設定,Lombok 會將任何
@lombok.extern.java.Log
的使用標記為警告或錯誤。 -
lombok.log.log4j.flagUsage
= [warning
|error
](預設值:未設定) - 如果已設定,Lombok 會將任何
@lombok.extern.log4j.Log4j
的使用標記為警告或錯誤。 -
lombok.log.log4j2.flagUsage
= [warning
|error
](預設值:未設定) - 如果已設定,Lombok 會將任何
@lombok.extern.log4j.Log4j2
的使用標記為警告或錯誤。 -
lombok.log.slf4j.flagUsage
= [warning
|error
](預設值:未設定) - 如果已設定,Lombok 會將任何
@lombok.extern.slf4j.Slf4j
的使用標記為警告或錯誤。 -
lombok.log.xslf4j.flagUsage
= [warning
|error
](預設值:未設定) - 如果已設定,Lombok 會將任何
@lombok.extern.slf4j.XSlf4j
的使用標記為警告或錯誤。
小字聲明
如果名為 log
的欄位已存在,將會發出警告,並且不會產生任何程式碼。
lombok 多樣化日誌註解的未來功能是尋找對 logger 欄位的呼叫,並且如果選定的日誌框架支援它,並且可以從日誌呼叫中編譯時確定日誌等級,則使用 if
陳述式保護它。這樣一來,如果日誌陳述式最終被忽略,則可以完全避免日誌字串的潛在昂貴計算。這確實意味著您不應將任何副作用放在您記錄的表達式中。