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