SLF4J - Journalisation paramétrée
Comme indiqué précédemment dans ce didacticiel, SLF4J prend en charge les messages de journal paramétrés.
Vous pouvez utiliser des paramètres dans les messages et leur transmettre des valeurs ultérieurement dans la même instruction.
Syntaxe
Comme indiqué ci-dessous, vous devez utiliser des espaces réservés ({}) dans le message (String) partout où vous en avez besoin et plus tard, vous pouvez transmettre la valeur de l'espace réservé dans object formulaire, en séparant le message et la valeur par une virgule.
Integer age;
Logger.info("At the age of {} ramu got his first job", age);
Exemple
L'exemple suivant illustre la journalisation paramétrée (avec un seul paramètre) à l'aide de 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);
}
}
Production
Lors de l'exécution, le programme ci-dessus génère la sortie suivante -
Dec 10, 2018 3:25:45 PM PlaceHolders main
INFO: At the age of 23 Ramu got his first job
Avantage de la journalisation paramétrée
En Java, si nous devons imprimer des valeurs dans une instruction, nous utiliserons l'opérateur de concaténation comme -
System.out.println("At the age of "+23+" ramu got his first job");
Cela implique la conversion de la valeur entière 23 en chaîne et la concaténation de cette valeur avec les chaînes qui l'entourent.
Et s'il s'agit d'une instruction de journalisation, et si ce niveau de journalisation particulier de votre instruction est désactivé, tout ce calcul ne sera d'aucune utilité.
Dans de telles circonstances, vous pouvez utiliser la journalisation paramétrée. Dans ce format, SLF4J confirme initialement si la journalisation pour un niveau particulier est activée. Si tel est le cas, il remplace les espaces réservés dans les messages par les valeurs respectives.
Par exemple, si nous avons une instruction comme
Integer age;
Logger.debug("At the age of {} ramu got his first job", age);
Seulement si le débogage est activé, SLF4J convertit l'âge en entier et le concatène avec les chaînes sinon, il ne fait rien. Cela entraîne ainsi le coût de construction des paramètres lorsque le niveau de journalisation est désactivé.
Variante à deux arguments
Vous pouvez également utiliser deux paramètres dans un message comme -
logger.info("Old weight is {}. new weight is {}.", oldWeight, newWeight);
Exemple
L'exemple suivant illustre l'utilisation de deux espaces réservés dans la journalisation paramétrée.
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));
}
}
Production
Lors de l'exécution, le programme ci-dessus génère la sortie suivante.
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 d'argument multiple
Vous pouvez également utiliser plus de deux espaces réservés, comme illustré dans l'exemple suivant -
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);
}
}
Production
Lors de l'exécution, le programme ci-dessus génère la sortie suivante -
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