1. Обзор
Ведение журнала является жизненно важным компонентом в каждом приложении. Когда мы используем механизм ведения журнала в нашем приложении, мы можем хранить наши журналы в файле или базе данных. Кроме того, мы можем отправлять данные журналов в централизованное приложение для управления журналами, такое как Graylog или Syslog :
В этом руководстве мы опишем, как отправлять информацию журнала на сервер Syslog с помощью Log4j2 в приложении Spring Boot .
2. Лог4j2
Log4j2 — это последняя версия Log4j. Это распространенный выбор для высокопроизводительного ведения журнала, который используется во многих производственных приложениях.
2.1. Зависимость от Maven
Начнем с добавления зависимости spring-boot-starter-log4j2
в наш pom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>2.5.2</version>
</dependency>
Для настройки Log4j2 в приложении Spring Boot нам нужно исключить стандартную структуру ведения журналов Logback
из любой стартовой библиотеки в pom.xml
. В нашем проекте есть только зависимость spring-boot-starter-web
starter. Исключим из него логгирование по умолчанию:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
2.2. Конфигурация Log4j2
Теперь мы создадим файл конфигурации Log4j2. Проект Spring Boot ищет файлы log4j2-spring.xml
или log4j2.xml
в пути к классам. Давайте настроим простой файл log4j2-spring.xml
в каталоге ресурсов
:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT">
<PatternLayout
pattern="%style{%date{DEFAULT}}{yellow} %highlight{%-5level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=green} %message"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="ConsoleAppender"/>
</Root>
</Loggers>
</Configuration>
Конфигурация имеет приложение консоли
для отображения данных журнала на консоли.
2.3. Приложение системного журнала
Appenders являются основным компонентом фреймворков журналирования, которые доставляют данные журналов в место назначения. Log4j2 поддерживает множество приложений, таких как приложение Syslog. Давайте обновим наш файл log4j2-spring.xml
, чтобы добавить приложение Syslog для отправки данных журнала на сервер Syslog:
<Syslog name="Syslog" format="RFC5424" host="localhost" port="514"
protocol="UDP" appName="foreach" facility="LOCAL0" />
Приложение Syslog имеет множество атрибутов:
name
: имя приложенияформат
: он может быть установлен в BSD или RFC5424.host
: адрес сервера Syslogport
: порт сервера Syslogпротокол
: использовать ли TCP или UPDappName
: имя приложения, которое ведет журналсредство
: категория сообщения
3. Сервер системного журнала
Теперь давайте настроим сервер Syslog. Во многих дистрибутивах Linux основным механизмом ведения журнала является rsyslog
. Он включен в большинство дистрибутивов Linux, таких как Ubuntu и CentOS.
3.1. Конфигурация системного журнала
Наша конфигурация rsyslog
должна соответствовать настройке Log4j2. Конфигурация rsyslog
определяется в файле /etc/rsyslog.conf .
Мы используем UDP и порт 514 для протокола
и порта
в конфигурации Log4j2 соответственно. Поэтому мы добавим или раскомментируем следующие строки в файле rsyslog.conf
:
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
В данном случае мы устанавливаем module(load=”imudp”)
для загрузки модуля imudp
для получения сообщений Syslog через UDP. Затем мы устанавливаем порт
на 514, используя конфигурацию ввода .
Вход назначает
порт модулю. После этого нам следует перезапустить сервер rsyslog
:
sudo service rsyslog restart
Теперь конфигурация готова.
3.2. Тестирование
Давайте создадим простое приложение Spring Boot, которое регистрирует несколько сообщений:
@SpringBootApplication
public class SpringBootSyslogApplication {
private static final Logger logger = LogManager.getLogger(SpringBootSyslogApplication.class);
public static void main(String[] args) {
SpringApplication.run(SpringBootSyslogApplication.class, args);
logger.debug("Debug log message");
logger.info("Info log message");
logger.error("Error log message");
logger.warn("Warn log message");
logger.fatal("Fatal log message");
logger.trace("Trace log message");
}
}
Информация журнала хранится в каталоге /var/log/ .
Давайте проверим файл системного журнала
:
tail -f /var/log/syslog
Когда мы запустим наше приложение Spring Boot, мы увидим наши сообщения журнала:
Jun 30 19:49:35 foreach[16841] Info log message
Jun 30 19:49:35 foreach[16841] Error log message
Jun 30 19:49:35 foreach[16841] Warn log message
Jun 30 19:49:35 foreach[16841] Fatal log message
4. Вывод
В этом руководстве мы описали конфигурацию системного журнала в Log4j2 в приложении Spring Boot. Кроме того, мы настроили сервер rsyslog
в качестве сервера системного журнала. Как обычно, полный исходный код можно найти на GitHub .