Учебники

SLF4J — параметризованная регистрация

Как обсуждалось ранее в этом руководстве, 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);
   }
}

Выход

После выполнения вышеуказанная программа генерирует следующий вывод: