Перейти к основному содержимому

Запись данных журнала в системный журнал с использованием Log4j2

· 4 мин. чтения

1. Обзор

Ведение журнала является жизненно важным компонентом в каждом приложении. Когда мы используем механизм ведения журнала в нашем приложении, мы можем хранить наши журналы в файле или базе данных. Кроме того, мы можем отправлять данные журналов в централизованное приложение для управления журналами, такое как Graylog или Syslog :

./9104a364660da3248a8a48e514e86e4b.png

В этом руководстве мы опишем, как отправлять информацию журнала на сервер 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 : адрес сервера Syslog
  • port : порт сервера Syslog
  • протокол : использовать ли TCP или UPD
  • appName : имя приложения, которое ведет журнал
  • средство : категория сообщения

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 .