SLF4J - Registrazione parametrizzata
Come discusso in precedenza in questo tutorial, SLF4J fornisce il supporto per i messaggi di log parametrizzati.
È possibile utilizzare i parametri nei messaggi e passare loro dei valori successivamente nella stessa istruzione.
Sintassi
Come mostrato di seguito, è necessario utilizzare i segnaposto ({}) nel messaggio (Stringa) ovunque sia necessario e successivamente è possibile passare il valore per il segnaposto in object form, separando il messaggio e il valore con una virgola.
Integer age;
Logger.info("At the age of {} ramu got his first job", age);
Esempio
L'esempio seguente mostra la registrazione parametrizzata (con un singolo parametro) utilizzando 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);
}
}
Produzione
Al momento dell'esecuzione, il programma precedente genera il seguente output:
Dec 10, 2018 3:25:45 PM PlaceHolders main
INFO: At the age of 23 Ramu got his first job
Vantaggio della registrazione parametrizzata
In Java, se abbiamo bisogno di stampare valori in un'istruzione, useremo l'operatore di concatenazione come -
System.out.println("At the age of "+23+" ramu got his first job");
Ciò comporta la conversione del valore intero 23 in stringa e la concatenazione di questo valore con le stringhe che lo circondano.
E se si tratta di un'istruzione di registrazione e se quel particolare livello di registrazione dell'istruzione è disabilitato, tutto questo calcolo sarà inutile.
In tali circostanze, è possibile utilizzare la registrazione parametrizzata. In questo formato, inizialmente SLF4J conferma se la registrazione per un particolare livello è abilitata. In tal caso, sostituisce i segnaposto nei messaggi con i rispettivi valori.
Ad esempio, se abbiamo un'istruzione come
Integer age;
Logger.debug("At the age of {} ramu got his first job", age);
Solo se il debug è abilitato, SLF4J converte l'età in numero intero e lo concatena con le stringhe, altrimenti non fa nulla. Incorrere così nel costo della costruzione dei parametri quando il livello di registrazione è disabilitato.
Variante a due argomenti
È inoltre possibile utilizzare due parametri in un messaggio come:
logger.info("Old weight is {}. new weight is {}.", oldWeight, newWeight);
Esempio
L'esempio seguente mostra l'utilizzo di due segnaposto nella registrazione parametrizzata.
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));
}
}
Produzione
Al momento dell'esecuzione, il programma di cui sopra genera il seguente output.
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
Variante di più argomenti
È inoltre possibile utilizzare più di due segnaposto come mostrato nell'esempio seguente:
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);
}
}
Produzione
Al momento dell'esecuzione, il programma precedente genera il seguente output:
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