1. 概要

ロギングは、すべてのアプリケーションで不可欠なコンポーネントです。 アプリケーションでログメカニズムを使用すると、ログをファイルまたはデータベースに保存できます。 さらに、ログデータをGraylogSyslogなどの集中ログ管理アプリケーションに送信できます。

このチュートリアルでは、Spring BootアプリケーションでLog4j2を使用してログ情報をSyslogサーバーに送信する方法について説明します。

2. Log4j2

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>

Spring BootアプリケーションでLog4j2を構成するには、pom.xmlのスターターライブラリからデフォルトのLogbackロギングフレームワークを除外する必要があります。 私たちのプロジェクトでは、 spring-boot-starter-webスターターの依存関係のみがあります。 デフォルトのログを除外しましょう。

<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ファイルを検索します。 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

アペンダーは、ロギングデータを宛先に配信するロギングフレームワークの主要コンポーネントです。 Log4j2は、Syslogアペンダーなどの多くのアペンダーをサポートしています。 log4j2- spring .xml ファイルを更新して、ログデータをSyslogサーバーに送信するための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サーバーのポート
  • プロトコル:TCPまたはUPDのどちらを使用するか
  • appName :ログに記録されているアプリケーションの名前
  • ファシリティ:メッセージのカテゴリ

3. Syslogサーバー

それでは、Syslogサーバーをセットアップしましょう。 多くのLinuxディストリビューションでは、rsyslogが主要なロギングメカニズムです。 UbuntuやCentOSなどのほとんどのLinuxディストリビューションに含まれています。

3.1. Syslog構成

rsyslog構成は、Log4j2設定と一致する必要があります。 The rsyslog 構成はで定義されています /etc/rsyslog.conf ファイル。 Log4j2構成のプロトコルポートには、それぞれUDPとポート514を使用しています。 したがって、rsyslog.confファイルに次の行を追加またはコメント解除します。

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

この場合、 module(load =” imudp”)を設定して imudp モジュールをロードし、UDP経由でSyslogメッセージを受信します。 次に、入力構成を使用して、ポートを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. 結論

このチュートリアルでは、SpringBootアプリケーションのLog4j2でのSyslog構成について説明しました。 また、rsyslogサーバーをSyslogサーバーとして構成しました。 いつものように、完全なソースコードはGitHubにあります。