SLF4J - Ghi nhật ký tham số
Như đã thảo luận trước đó trong hướng dẫn này, SLF4J cung cấp hỗ trợ cho các thông báo nhật ký được tham số hóa.
Bạn có thể sử dụng các tham số trong các thông báo và chuyển các giá trị cho chúng sau này trong cùng một câu lệnh.
Cú pháp
Như được hiển thị bên dưới, bạn cần sử dụng trình giữ chỗ ({}) trong thông báo (Chuỗi) bất cứ nơi nào bạn cần và sau này bạn có thể chuyển giá trị cho trình giữ chỗ vào object biểu mẫu, phân tách thông báo và giá trị bằng dấu phẩy.
Integer age;
Logger.info("At the age of {} ramu got his first job", age);
Thí dụ
Ví dụ sau minh họa ghi nhật ký được tham số hóa (với một tham số) bằng 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);
}
}
Đầu ra
Khi thực hiện, chương trình trên tạo ra kết quả sau:
Dec 10, 2018 3:25:45 PM PlaceHolders main
INFO: At the age of 23 Ramu got his first job
Lợi thế của ghi nhật ký tham số
Trong Java, nếu chúng ta cần in các giá trị trong một câu lệnh, chúng ta sẽ sử dụng toán tử nối là:
System.out.println("At the age of "+23+" ramu got his first job");
Điều này liên quan đến việc chuyển đổi giá trị số nguyên 23 thành chuỗi và nối giá trị này với các chuỗi xung quanh nó.
Và nếu đó là một câu lệnh ghi nhật ký và nếu mức độ nhật ký cụ thể đó của câu lệnh của bạn bị vô hiệu hóa thì tất cả phép tính này sẽ không có ích gì.
Trong những trường hợp như vậy, bạn có thể sử dụng ghi nhật ký được tham số hóa. Ở định dạng này, ban đầu SLF4J xác nhận việc ghi nhật ký cho cấp cụ thể có được bật hay không. Nếu vậy thì nó sẽ thay thế các trình giữ chỗ trong các thông báo bằng các giá trị tương ứng.
Ví dụ: nếu chúng ta có một tuyên bố là
Integer age;
Logger.debug("At the age of {} ramu got his first job", age);
Chỉ khi gỡ lỗi được kích hoạt sau đó, SLF4J chuyển đổi tuổi thành số nguyên và nối nó với các chuỗi, nếu không thì nó không có tác dụng gì. Do đó, phát sinh chi phí xây dựng tham số khi cấp độ ghi nhật ký bị vô hiệu hóa.
Hai biến thể đối số
Bạn cũng có thể sử dụng hai tham số trong một tin nhắn là -
logger.info("Old weight is {}. new weight is {}.", oldWeight, newWeight);
Thí dụ
Ví dụ sau minh họa việc sử dụng hai trình giữ chỗ trong ghi nhật ký được tham số hóa.
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));
}
}
Đầu ra
Khi thực hiện, chương trình trên tạo ra kết quả sau.
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
Nhiều biến thể đối số
Bạn cũng có thể sử dụng nhiều hơn hai trình giữ chỗ như được hiển thị trong ví dụ sau:
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);
}
}
Đầu ra
Khi thực hiện, chương trình trên tạo ra kết quả sau:
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