SLF4J - Logging berparameterisasi

Seperti dibahas sebelumnya dalam tutorial ini SLF4J menyediakan dukungan untuk pesan log berparameter.

Anda dapat menggunakan parameter dalam pesan dan meneruskan nilai padanya nanti dalam pernyataan yang sama.

Sintaksis

Seperti yang diperlihatkan di bawah, Anda perlu menggunakan placeholder ({}) dalam pesan (String) di mana pun Anda butuhkan dan nanti Anda bisa meneruskan nilai untuk placeholder di object bentuk, memisahkan pesan dan nilai dengan koma.

Integer age;
Logger.info("At the age of {} ramu got his first job", age);

Contoh

Contoh berikut menunjukkan logging berparameter (dengan parameter tunggal) menggunakan 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);
   }
}

Keluaran

Setelah dieksekusi, program di atas menghasilkan keluaran berikut -

Dec 10, 2018 3:25:45 PM PlaceHolders main
INFO: At the age of 23 Ramu got his first job

Keuntungan dari Parameterized Logging

Di Java, jika kita perlu mencetak nilai dalam sebuah pernyataan, kita akan menggunakan operator penggabungan sebagai -

System.out.println("At the age of "+23+" ramu got his first job");

Ini melibatkan konversi nilai integer 23 menjadi string dan penggabungan nilai ini ke string yang mengelilinginya.

Dan jika itu adalah pernyataan pencatatan, dan jika tingkat log tertentu dari pernyataan Anda dinonaktifkan, semua perhitungan ini tidak akan berguna.

Dalam keadaan seperti itu, Anda dapat menggunakan logging berparameter. Dalam format ini, awalnya SLF4J mengkonfirmasi apakah pencatatan untuk tingkat tertentu diaktifkan. Jika demikian, itu menggantikan placeholder di pesan dengan nilai masing-masing.

Misalnya, jika kita memiliki pernyataan sebagai

Integer age;
Logger.debug("At the age of {} ramu got his first job", age);

Hanya jika debugging diaktifkan kemudian, SLF4J mengubah usia menjadi integer dan menggabungkannya dengan string jika tidak, SLF4J tidak melakukan apa-apa. Sehingga menimbulkan biaya konstruksi parameter saat tingkat logging dinonaktifkan.

Dua Varian Argumen

Anda juga dapat menggunakan dua parameter dalam sebuah pesan sebagai -

logger.info("Old weight is {}. new weight is {}.", oldWeight, newWeight);

Contoh

Contoh berikut menunjukkan penggunaan dua placeholder dalam pembuatan log parametrized.

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));
   }
}

Keluaran

Setelah dieksekusi, program di atas menghasilkan keluaran sebagai berikut.

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

Varian Argumen Ganda

Anda juga dapat menggunakan lebih dari dua tempat penampung seperti yang diperlihatkan dalam contoh berikut -

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);
   }
}

Keluaran

Setelah dieksekusi, program di atas menghasilkan keluaran berikut -

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