Log4j2を使用したSyslogへのログデータの書き込み
1. 概要
ロギングは、すべてのアプリケーションで不可欠なコンポーネントです。 アプリケーションでログメカニズムを使用すると、ログをファイルまたはデータベースに保存できます。 さらに、ログデータをGraylogやSyslogなどの集中ログ管理アプリケーションに送信できます。
このチュートリアルでは、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構成
# 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のにあります。