SLF4J - Parametreli günlük kaydı

Bu eğiticide daha önce tartışıldığı gibi SLF4J, parametreli günlük mesajları için destek sağlar.

Mesajlarda parametreler kullanabilir ve değerleri daha sonra aynı ifadede onlara iletebilirsiniz.

Sözdizimi

Aşağıda gösterildiği gibi, ihtiyacınız olan her yerde mesajda (Dize) yer tutucular ({}) kullanmanız gerekir ve daha sonra yer tutucu için değer iletebilirsiniz. object biçim, mesajı ve değeri virgülle ayırarak.

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

Misal

Aşağıdaki örnek, SLF4J kullanılarak parametreli günlük kaydını (tek parametreli) gösterir.

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

Çıktı

Yürütme üzerine, yukarıdaki program aşağıdaki çıktıyı üretir -

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

Parametreli Günlük Kaydının Avantajı

Java'da, bir ifadede değerleri yazdırmamız gerekirse, birleştirme operatörünü şu şekilde kullanacağız -

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

Bu, 23 tam sayı değerinin dizeye dönüştürülmesini ve bu değerin onu çevreleyen dizelere birleştirilmesini içerir.

Ve eğer bu bir günlüğe kaydetme ifadesiyse ve ifadenizin belirli günlük düzeyi devre dışı bırakılırsa, tüm bu hesaplamanın bir faydası olmayacaktır.

Bu tür durumlarda, parametreli günlük kaydını kullanabilirsiniz. Bu formatta, başlangıçta SLF4J, belirli bir seviye için günlük kaydının etkinleştirilip etkinleştirilmediğini onaylar. Öyleyse, mesajlardaki yer tutucuları ilgili değerlerle değiştirir.

Örneğin, bir ifademiz varsa

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

Yalnızca hata ayıklama etkinleştirilirse, SLF4J yaşı tam sayıya dönüştürür ve aksi takdirde dizelerle birleştirir, hiçbir şey yapmaz. Böylece, kayıt seviyesi devre dışı bırakıldığında parametre yapılarının maliyetini ortaya çıkarır.

İki Bağımsız Değişken

Ayrıca bir mesajda şu iki parametreyi de kullanabilirsiniz:

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

Misal

Aşağıdaki örnek, parametreleştirilmiş günlük kaydında iki yer tutucunun kullanımını göstermektedir.

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

Çıktı

Yürütme üzerine, yukarıdaki program aşağıdaki çıktıyı üretir.

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

Çoklu Argüman Varyantı

Aşağıdaki örnekte gösterildiği gibi ikiden fazla yer tutucu da kullanabilirsiniz -

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

Çıktı

Yürütme üzerine, yukarıdaki program aşağıdaki çıktıyı üretir -

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