SLF4J - параметризованное ведение журнала
Как обсуждалось ранее в этом руководстве, SLF4J обеспечивает поддержку параметризованных сообщений журнала.
Вы можете использовать параметры в сообщениях и передавать им значения позже в том же операторе.
Синтаксис
Как показано ниже, вам нужно использовать заполнители ({}) в сообщении (String) везде, где вам нужно, а позже вы можете передать значение для заполнителя в object форма, разделив сообщение и значение запятой.
Integer age;
Logger.info("At the age of {} ramu got his first job", age);
пример
В следующем примере демонстрируется параметризованное ведение журнала (с одним параметром) с использованием 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);
}
}
Вывод
После выполнения вышеуказанная программа генерирует следующий вывод:
Dec 10, 2018 3:25:45 PM PlaceHolders main
INFO: At the age of 23 Ramu got his first job
Преимущество параметризованной регистрации
В Java, если нам нужно вывести значения в операторе, мы будем использовать оператор конкатенации как -
System.out.println("At the age of "+23+" ramu got his first job");
Это включает преобразование целочисленного значения 23 в строку и объединение этого значения с окружающими его строками.
И если это оператор ведения журнала, и если этот конкретный уровень журнала вашего оператора отключен, тогда все эти вычисления будут бесполезны.
В таких обстоятельствах вы можете использовать параметризованное ведение журнала. В этом формате изначально SLF4J подтверждает, включено ли ведение журнала для определенного уровня. Если это так, то он заменяет заполнители в сообщениях соответствующими значениями.
Например, если у нас есть утверждение как
Integer age;
Logger.debug("At the age of {} ramu got his first job", age);
Только если включена отладка, SLF4J преобразует возраст в целое число и объединяет его со строками, иначе ничего не делает. Таким образом, затраты на построение параметров при отключенном уровне ведения журнала.
Вариант с двумя аргументами
Вы также можете использовать два параметра в сообщении как -
logger.info("Old weight is {}. new weight is {}.", oldWeight, newWeight);
пример
В следующем примере демонстрируется использование двух заполнителей в параметризованном ведении журнала.
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));
}
}
Вывод
После выполнения вышеуказанная программа генерирует следующий вывод.
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
Вариант с несколькими аргументами
Вы также можете использовать более двух заполнителей, как показано в следующем примере -
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);
}
}
Вывод
После выполнения вышеуказанная программа генерирует следующий вывод:
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