
SLF4J - 引數化日誌記錄
如本教程前面所述,SLF4J 支援引數化日誌訊息。
您可以在訊息中使用引數,並在稍後的同一語句中傳遞值。
語法
如下所示,您需要在訊息(字串)中使用佔位符({}),稍後您可以以**物件**形式傳遞佔位符的值,並用逗號分隔訊息和值。
Integer age; Logger.info("At the age of {} ramu got his first job", age);
示例
以下示例演示了使用 SLF4J 進行引數化日誌記錄(帶單個引數)。
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PlaceHolders { public static void main(String[] args) { //Creating the Logger object Logger logger = LoggerFactory.getLogger(PlaceHolders.class); Integer age = 23; //Logging the information logger.info("At the age of {} ramu got his first job", age); } }
輸出
執行後,上述程式生成以下輸出:
Dec 10, 2018 3:25:45 PM PlaceHolders main INFO: At the age of 23 Ramu got his first job
引數化日誌記錄的優勢
在 Java 中,如果我們需要在語句中列印值,我們將使用連線運算子,如下所示:
System.out.println("At the age of "+23+" ramu got his first job");
這涉及將整數 23 轉換為字串,並將該值與周圍的字串連線起來。
如果這是一個日誌語句,並且該語句的特定日誌級別被停用,那麼所有這些計算都將毫無用處。
在這種情況下,您可以使用引數化日誌記錄。在此格式中,SLF4J 最初會確認是否啟用了特定級別的日誌記錄。如果是,則它會將訊息中的佔位符替換為相應的值。
例如,如果我們有一個語句如下:
Integer age; Logger.debug("At the age of {} ramu got his first job", age);
只有在啟用除錯時,SLF4J 才會將 age 轉換為整數並將其與字串連線起來,否則它不會做任何事情。從而在日誌級別被停用時避免了引數構造的開銷。
兩個引數變體
您也可以在訊息中使用兩個引數,如下所示:
logger.info("Old weight is {}. new weight is {}.", oldWeight, newWeight);
示例
以下示例演示了在引數化日誌記錄中使用兩個佔位符。
import java.util.Scanner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PlaceHolders { public static void main(String[] args) { Integer oldWeight; Integer newWeight; Scanner sc = new Scanner(System.in); System.out.println("Enter old weight:"); oldWeight = sc.nextInt(); System.out.println("Enter new weight:"); newWeight = sc.nextInt(); //Creating the Logger object Logger logger = LoggerFactory.getLogger(Sample.class); //Logging the information logger.info("Old weight is {}. new weight is {}.", oldWeight, newWeight); //Logging the information logger.info("After the program weight reduced is: "+(oldWeight-newWeight)); } }
輸出
執行後,上述程式生成以下輸出。
Enter old weight: 85 Enter new weight: 74 Dec 10, 2018 4:12:31 PM PlaceHolders main INFO: Old weight is 85. new weight is 74. Dec 10, 2018 4:12:31 PM PlaceHolders main INFO: After the program weight reduced is: 11
多個引數變體
您還可以使用兩個以上的佔位符,如下例所示:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PlaceHolders { public static void main(String[] args) { Integer age = 24; String designation = "Software Engineer"; String company = "Infosys"; //Creating the Logger object Logger logger = LoggerFactory.getLogger(Sample.class); //Logging the information logger.info("At the age of {} ramu got his first job as a {} at {}", age, designation, company); } }
輸出
執行後,上述程式生成以下輸出:
Dec 10, 2018 4:23:52 PM PlaceHolders main INFO: At the age of 24 ramu got his first job as a Software Engineer at Infosys
廣告