1. 概述
日誌記錄是每種應用程序中必不可少的一個組成部分。當我們使用應用程序中的日誌記錄機制時,我們可以將日誌存儲在文件中或數據庫中。此外,我們還可以將日誌數據發送到集中式日誌管理應用程序,例如 Graylog 和 Syslog。
在本教程中,我們將描述如何使用 Log4j2 在 Spring Boot 應用程序中將日誌信息發送到 Syslog 服務器。
2. Log4j2
Log4j2 是 Log4j 的最新版本。它是一種高性能日誌記錄的常用選擇,並被廣泛應用於許多生產應用程序中。
2.1. Maven 依賴
讓我們首先添加 spring-boot-starter-log4j2 依賴到我們的 <em>pom.xml</em> 中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>在 Spring Boot 應用程序中配置 Log4j2 時,我們需要從任何 starter 庫的 Logback 默認日誌框架中排除它。 在我們的項目中,只有一個 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 項目會搜索 classpath 中的 log4j2-spring.xml 或 log4j2.xml 文件。 讓我們在 resource 目錄下配置一個簡單的 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>配置中有一個 Console 應用器,用於將日誌數據顯示到控制枱。
2.3. Syslog Appender
Appenders 是日誌框架中的主要組件,用於將日誌數據傳遞到目標目的地。Log4j2 支持多種 Appenders,例如 Syslog Appender。 讓我們更新我們的 <em >log4j2-spring.xml</em> 文件,以添加 Syslog Appender,以便將日誌數據發送到 Syslog 服務器:
<Syslog name="Syslog" format="RFC5424" host="localhost" port="514"
protocol="UDP" appName="baeldung" facility="LOCAL0" />Syslog 附加器具有許多屬性:
- name: 附加器的名稱
- format: 可以設置為 BSD 或 RFC5424
- host: Syslog 服務器的地址
- port: Syslog 服務器的端口
- protocol: 使用 TCP 或 UPD
- appName: 正在記錄的應用程序的名稱
- facility: 消息的類別
3. Syslog 服務器
現在,讓我們設置 Syslog 服務器。在許多 Linux 發行版中,rsyslog 是主要的日誌機制。它包含在大多數 Linux 發行版中,例如 Ubuntu 和 CentOS。
3.1. Syslog 配置
我們的 rsyslog 配置應與 Log4j2 設置保持一致。 rsyslog 配置定義在 /etc/rsyslog.conf 文件中。 我們使用 UDP 協議和端口 514,在 Log4j2 配置中分別對應 protocol 和 port。 因此,我們將添加或取消註釋以下行以添加到 rsyslog.conf 文件中:
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
在這種情況下,我們將 module(load=”imudp”) 設置為加載 imudp 模塊,以便通過 UDP 接收 Syslog 消息。然後,我們使用 input 配置將 port 設置為 514。 input 命令將端口分配給模塊。之後,我們應該重啓 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/ 目錄下。 讓我們檢查 syslog 文件:
tail -f /var/log/syslog當我們運行我們的 Spring Boot 應用程序時,我們會看到我們的日誌消息:
Jun 30 19:49:35 baeldung[16841] Info log message
Jun 30 19:49:35 baeldung[16841] Error log message
Jun 30 19:49:35 baeldung[16841] Warn log message
Jun 30 19:49:35 baeldung[16841] Fatal log message
4. 結論
在本教程中,我們詳細介紹了在 Spring Boot 應用程序中配置 Syslog 的方法,應用於 Log4j2。