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