知識庫 / Spring / Spring Boot RSS 訂閱

使用 Log4j2 將日誌數據寫入 Syslog

Logging,Spring Boot
HongKong
6
12:32 PM · Dec 06 ,2025

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.xmllog4j2.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 配置中分別對應 protocolport。 因此,我們將添加或取消註釋以下行以添加到 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。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.