Рубрики
Без рубрики

Вход в весеннюю загрузку с помощью SLF4J

В этом уроке мы расскажем, как войти в Spring Boot с помощью SLF4J. Мы рассмотрим уровни журналов, группы журналов и регистратор обратного входа по умолчанию с примерами.

Автор оригинала: Rayven Yor Esplanada.

Вступление

Журналы сервера являются важной частью разработки, в которых записываются действия или события, выполняемые системой в любой данный момент времени.

Spring Boot по умолчанию использует Журнал Apache Commons для своих системных журналов. Кроме того, по умолчанию вы можете использовать любую из фреймворков ведения журнала в SLF4J API , таких как Logback (который используется по умолчанию), Log4J2 и ведение журнала Java Util при весенней загрузке.

Ведение журнала приложений-это мощный инструмент разработки, который важен для поддержки и отладки на уровне производства. Каждая запись журнала содержит такую информацию, как отметка времени, вызываемый фактический метод, пользовательское сообщение журнала и другую контекстную информацию. Каждая запись в журнале также содержит идентификатор, называемый уровнем ведения журнала.

В этом руководстве мы рассмотрим, как выполнять ведение журнала в Spring Boot с использованием SLF4J, а также уровни журналов и конфигурацию, необходимую для их настройки, и группы журналов.

Регистрируйте сообщения в весенней загрузке

Чтобы включить ведение журнала весной, импортируйте Logger и LoggerFactory из библиотеки org.slf4j API:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

После этого объявите константу для хранения службы регистратора, создав экземпляр регистратора для класса с помощью LoggerFactory :

private static final Logger log = LoggerFactory.getLogger(DemoService.class);

Этот log обычно определяется в самом верху списка глобальных переменных, поскольку это константа. Предоставив класс, который вы хотите зарегистрировать, он полностью настроен и готов к вызову с предоставленными сообщениями.

В качестве альтернативы вы можете просто аннотировать класс с помощью @Slf4j , который автоматически создаст регистратор для класса без необходимости объявлять константу. В аннотации указана статическая переменная с именем log , которая по умолчанию предоставляет утилиты регистратора:

@Slf4j
@Service
public class DemoService {
    //...
}

Примечание: Наиболее распространенным идентификатором регистратора является log , хотя во многих случаях вы также увидите logger . На самом деле, вы можете называть это как угодно, но log лаконичен и избавляет вас от написания более длинного имени из-за частых звонков.

Регистрация в Spring Boot состоит из разных уровней. Каждый журнал имеет степень срочности или важности , связанную с уровнем журнала. Уровни журнала настраиваются во время выполнения, и каждый запрос журнала проверяет уровень журнала, чтобы определить, имеет ли запрос такой же или более высокий приоритет, чем отображаемый уровень журнала.

Если вы попытаетесь зарегистрировать сообщение, которое считается менее важным, чем какой-либо порог, оно просто не будет зарегистрировано.

Возьмем, к примеру, этот блок с сообщениями важности журнала в порядке убывания:

public void logLevelDisplay () {
    logger.error("Error message");
    logger.warn("Warning message");
    logger.info("Info message");
    logger.debug("Debug message");
    logger.trace("Trace message");
}

Если в application.properties или в другом месте не задано никаких конфигураций, уровень журнала по умолчанию будет равен INFO . Поэтому , если бы мы вызвали метод отображение уровня журнала () , он выдал бы что-то вроде этого:

2020-12-20 12:46:35.880  ERROR 47958 --- [nio-8080-exec-1] c.service.DemoService   : Error message
2020-12-20 12:46:52.976  WARN 47958 --- [nio-8080-exec-1 c.service.DemoService    : Warn message
2020-12-20 12:46:59.104  INFO 47958 --- [nio-8080-exec-1] c.service.DemoService    : Info message

Сообщения DEBUG и ТРАССИРОВКА не отображались , поскольку уровень журнала приложения установлен на ИНФОРМАЦИЯ , который имеет более высокий уровень приоритета, чем два.

Если для уровня журнала было установлено значение ОШИБКА , то будет отображаться только сообщение об ошибке, так как это самый высокий уровень журнала из 5 встроенных уровней.

Это подводит нас к важной теме – уровни журнала , которые заслуживают собственного объяснения.

Уровни журнала в весенней загрузке

Регистрация в Spring Boot состоит из разных уровней. Каждый журнал имеет степень срочности или важности , связанную с уровнем журнала. Например, запросы SQL в режиме гибернации классифицируются как DEBUG , что является уровнем журнала с низкой срочностью, который в основном вызывается для целей отладки.

Уровни ведения журнала позволяют различать следующие примеры журналов:

  • Успешно обновлено Пользователь Информация: Обновлено имя Джон до Джон .
  • Исключение NullPointerException : идентификатор пользователя является нулевым

Первый журнал представляет собой общий информативный тип сообщения, в то время как второй журнал представляет собой Исключение NullPointerException сообщение.

Эти журналы имеют разные уровни срочности, и различие между ними с использованием уровней журналов важно для фильтрации журналов, которые не нужно выводить в зависимости от обстоятельств. Если происходит огромная ошибка, вы не хотите, чтобы она была загромождена кучей рабочих низкоуровневых INFO журналов!

SLF4J обеспечивает 5 уровней ведения журнала по умолчанию при весенней загрузке:

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

ОШИБКА – Журналы ошибок-это серьезные проблемы, которые затрагивают значительную часть системы или какая-то часть вашего приложения не смогла работать. Исключения рассматриваются ОШИБКИ журналы уровней. Другими примерами журналов ошибок являются сбои подключения к базе данных и ошибки конфигурации. ОШИБКА Журналы являются наиболее срочным уровнем журнала по умолчанию в SLF4J.

ПРЕДУПРЕЖДЕНИЕ – Журналы предупреждений используются для указания потенциальных проблем, которые могут привести к ошибкам и должны отслеживаться в случае их сбоя. Конечно, контекст предупреждения субъективен для разработчика и ситуации, поэтому журналы предупреждений могут варьироваться от системы к системе.

INFOINFO – это уровень ведения журнала по умолчанию, установленный Spring Boot. Если настройки не выполнены, уровень журнала автоматически устанавливается на ИНФОРМАЦИЯ . Эти типы журналов представляют собой информацию, которая обычно не требуется, но полезна в таких ситуациях, как отладка производственного кода или определение того, когда обрабатываются определенные данные.

ОТЛАДКАОТЛАДКА Журналы содержат более подробную, конкретную информацию, которая не требуется в обычных ситуациях. Это часто устанавливается в качестве уровня журнала, когда разработчик пытается глубоко отследить проблему или ошибку, которые трудно отследить.

ТРАССИРОВКАТРАССИРОВКА является более детализированной версией ОТЛАДКИ . ТРАССИРОВКА журналы являются исчерпывающими, представьте, что вы регистрируете каждую операцию, выполняемую системой, начиная с запуска службы, инициализации новых переменных и вызова методов.

В порядке срочности ОШИБКА является наиболее срочной, в то время как ТРАССИРОВКА является наименее срочным журналом. Уровень журнала по умолчанию в Spring Boot равен INFO , если ручная настройка не задана.

Настройка уровней журналов при весенней загрузке

Уровни журналов можно задать в среде Spring, установив ее конфигурации в application.properties .

Формат для настройки конфигурации уровня журнала – ведение журнала.уровень.[путь к классу] = [уровень] . Путь к классу указан, так как различные компоненты приложения могут быть настроены с различными уровнями журнала, что особенно полезно для изоляции кода и отладки.

Чтобы указать уровень журнала для всех классов, у которых нет собственных настроек уровня журнала, можно задать корневой регистратор с помощью ведение журнала.уровень.корень .

В application.properties :

logging.level.root=INFO
logging.level.com.test=DEBUG
logging.level.com.service.DemoService=WARN

В этой конфигурации для каждого класса, за исключением Демонстрационной службы и классов в пути к классам com.test , будут установлены уровни журнала INFO , в то время как классы test и Демонстрационная служба имеют свои собственные заданные уровни журнала.

Группы Журналов

Группы журналов-это полезный способ задать конфигурации регистратора для группы классов с разными путями к классам. Например, если вы хотите установить все уровни журнала тестового класса в DEBUG за один раз. Это возможно с помощью конфигурации logging.group.[название группы] :

# Initialize log group
logging.group.test=com.test, com.test-prod, com.apptest

# Set log level to log group
logging.level.test=DEBUG

При таком подходе вам не придется все время индивидуально настраивать уровень журнала всех связанных компонентов.

Вывод

Знание различных уровней журналов важно, особенно в таких ситуациях, как отладка в рабочей среде.

Допустим, в рабочей среде обнаружена серьезная ошибка, и в текущих журналах недостаточно информации для диагностики основной причины проблемы. При изменении уровня журнала на ОТЛАДКА или ТРАССИРОВКА в журналах будет отображаться крайне необходимая информация для определения важных деталей , которые могут привести к исправлению.

Весной конфигурации уровня журнала могут быть заданы в файле application.properties , который обрабатывается во время выполнения. Spring поддерживает 5 уровней журнала по умолчанию, ОШИБКА , ПРЕДУПРЕЖДЕНИЕ , ИНФОРМАЦИЯ , ОТЛАДКА и ТРАССИРОВКА , при этом ИНФОРМАЦИЯ является конфигурацией уровня журнала по умолчанию.