Как обсуждалось ранее в этом руководстве, SLF4J обеспечивает поддержку параметризованных сообщений журнала.
Вы можете использовать параметры в сообщениях и передавать им значения позже в том же операторе.
Синтаксис
Как показано ниже, вам нужно использовать заполнители ({}) в сообщении (String) везде, где вам нужно, и позже вы можете передать значение для заполнителя в форме объекта , разделяя сообщение и значение запятой.
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); } }
Выход
После выполнения вышеуказанная программа генерирует следующий вывод: