すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:Log4j ログの収集

最終更新日:Mar 26, 2026

Java アプリケーションのランタイムログを Log4j2 で管理する場合、Log4j2 アペンダーまたは Logtail を使用して、それらのログを Simple Log Service に送信し、分析できます。

Log4j の概要

Log4j は Apache が提供するオープンソースプロジェクトです。Log4j を使用すると、コンソール、ファイル、GUI コンポーネント、Socket サーバー、Windows NT イベントログ、UNIX Syslog デーモンなど、ログの送信先を設定できます。また、各ログメッセージの出力フォーマットも制御可能です。さらに、各ログメッセージにログレベルを定義することで、ログ生成プロセスをより詳細に制御できます。これらの設定は、アプリケーションコードを変更することなく、構成ファイルで柔軟に設定できます。Log4j は以下の 3 つの重要なコンポーネントで構成されます。

  • レイアウト (Layouts)

    レイアウトはログメッセージのフォーマットを定義します。以下の表に、一般的なレイアウトを示します。

    レイアウト

    説明

    HTMLLayout

    ログ出力を HTML テーブル形式でフォーマットします。

    SimpleLayout

    INFO レベルのメッセージに対するデフォルトフォーマットなど、シンプルな出力フォーマットを適用します。

    PatternLayout

    カスタムフォーマットでログを出力します。タイムスタンプ、ログレベル、スレッド名、クラス名、メソッド名、ログメッセージなどの要素の並び順およびフォーマットを指定できます。

  • アペンダー (Appenders)

    アペンダーはログメッセージを送信先に送信します。複数のアペンダーを設定して、ログをさまざまな送信先に送信できます。以下の表に、一般的なアペンダーを示します。

    アペンダー

    説明

    ConsoleAppender

    ログをコンソールに出力します。

    FileAppender

    ログをファイルに出力します。

    DailyRollingFileAppender

    ログをファイルに出力し、毎日新しいファイルにローテーションします。

    RollingFileAppender

    ファイルサイズが指定値に達すると、Log4j がファイル名を変更して新しいファイルを作成します。

    JDBCAppender

    ログメッセージをデータベースに保存します。

  • ロガー (Loggers)

    ロガーはログ情報を取得します。各ロガーには重要度または重大度に基づいてログレベルが割り当てられます。Log4j では、優先度の高い順に OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL の 8 つのログレベルが定義されています。ログレベルは継承され、子ロガーは親ロガーのすべてのログレベルを継承します。以下の表に、各ログレベルの説明を示します。

    ログレベル

    説明

    OFF

    すべてのログ出力を無効化します。

    FATAL

    アプリケーションの終了を引き起こす重大なエラーを示します。

    ERROR

    アプリケーションの停止を引き起こさないエラーを示します。

    WARN

    潜在的なエラーを警告します。

    INFO

    アプリケーションの進行状況を高レベルで追跡します。

    DEBUG

    デバッグ用の詳細情報を提供します。

    TRACE

    変数値や実行フローなど、プログラム実行をトレースするための詳細情報を提供します。

    ALL

    すべてのログレベルを有効化します。

説明

1 つのロガーに複数のアペンダーを関連付けることができますが、1 つのアペンダーは 1 つのレイアウトのみに関連付けられます。

前提条件

操作手順

説明

本トピックでは、Java 言語および Log4j2 を例として説明します。C、C++、.NET、PL/SQL などの他の言語でも Log4j インターフェイスを使用できます。構文および使用方法は Java と同様です。

ステップ 1:Log4j2 の構成

  1. Maven プロジェクトに必要な依存関係を追加します。

    <dependencies>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.23.1</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.23.1</version>
      </dependency>
    </dependencies>
  2. 構成ファイルを変更します。

    デフォルトでは、Log4j2 はクラスパス内に構成ファイルを検索します。存在しない場合は、手動で作成する必要があります。以下の例は、コンソールおよび app.log という名前のファイルの 2 つの送信先に出力するよう定義された log4j2.xml ファイルです。ルートロガーのログレベルは error に設定されており、コンソールに出力されます。また、com.example.demo.log という名前のロガーは trace ログレベルに設定され、ファイルに出力されます。Log4j2 の構成方法の詳細については、公式の Log4j 2 Configuration ドキュメントをご参照ください。

    <!-- status="WARN" は Log4j 2 自体の内部ステータスを設定します(アプリケーションのログ出力とは無関係)。構成処理中に発生する可能性のある問題をキャプチャおよび報告するために使用されます。 -->
    <Configuration status="WARN">
        <!-- 2 つのログ出力先(Appenders)の定義開始 -->
        <Appenders>
            <!-- 標準システム出力(コンソール)にログを出力する "Console" という名前のコンソールアペンダーを定義します。 -->
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS zzz} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
            <!-- "app.log" ファイルにログを出力する "MyFile" という名前のファイルアペンダーを定義します。 -->
            <File name="MyFile" fileName="app.log">
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS zzz} [%t] %-5level %logger{36} - %msg%n"/>
            </File>
        </Appenders>
        <!-- 2 つのログ出力先(Appenders)の定義終了 -->
    
        <!-- ログ出力動作(Loggers)の構成開始 -->
        <Loggers>
            <!-- "com.example.demo.log" という名前のロガーを定義し、そのログレベルを "trace" に設定します。このロガーは "MyFile" アペンダーを参照しており、"trace" レベル以上のログをそのアペンダー("MyFile")に出力します。 -->
            <Logger name="com.example.demo.log" level="trace">
                <AppenderRef ref="MyFile" />
            </Logger>
            <!-- ルートロガーを定義し、そのログレベルを "error" に設定します。このロガーは "Console" アペンダーを参照しており、"error" レベル以上のログをコンソールに出力します。 -->
            <Root level="error">
                <AppenderRef ref="Console" />
            </Root>
        </Loggers>
        <!-- ログ出力動作(Loggers)の構成終了 -->
    </Configuration>
  3. 基本的な使用方法です。

    定義済みのアペンダーを読み込み、ログを出力するサンプルコードを記述します。

        public void logExampleDemo() {
            // "com.example.demo.log" という名前の Logger インスタンスを取得します。
            Logger logger = LogManager.getLogger("com.example.demo.log");
    
            // 異なるレベルでログメッセージを記録します。
            logger.trace("trace level");
            logger.debug("debug level");
            logger.info("info level");
            logger.warn("warn level");
            logger.error("error level");
            logger.fatal("fatal level");
        }
  4. 以下のサンプルはログ出力結果を示しています。

    2024-05-28 13:37:16:295 CST [http-nio-8080-exec-8] TRACE com.example.demo.log - trace level
    2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] DEBUG com.example.demo.log - debug level
    2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] INFO  com.example.demo.log - info level
    2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] WARN  com.example.demo.log - warn level
    2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] ERROR com.example.demo.log - error level
    2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] FATAL com.example.demo.log - fatal level

ステップ 2:Log4j ログの収集

説明
  • アプリケーションで既に Log4j2 を使用している場合、ログをディスクに書き込まずにリアルタイムで送信するようアペンダーを構成できます。

  • Logtail は、サーバーにインストールしてファイルからログを収集するエージェントです。また、さまざまな処理プラグインをサポートします。

Log4j2 アペンダー

image
  1. Maven プロジェクトに必要な依存関係を追加します。

    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>2.5.0</version>
    </dependency>
    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>aliyun-log-log4j2-appender</artifactId>
        <version>0.1.12</version>
    </dependency>
  2. 構成ファイルを変更します。

    以下の例では、log4j2.xml という名前の XML 構成ファイルを使用します。ファイルが存在しない場合は、プロジェクトのルートディレクトリに作成してください。Loghub アペンダーおよびロガーを構成します。

    <Appenders>
        <Loghub name="Loghub"
                project="your project"
                logStore="your logStore"
                endpoint="your project endpoint"
                accessKeyId="your accessKey id"
                accessKeySecret="your accessKey secret"
                totalSizeInBytes="104857600"
                maxBlockMs="0"
                ioThreadCount="8"
                batchSizeThresholdInBytes="524288"
                batchCountThreshold="4096"
                lingerMs="2000"
                retries="10"
                baseRetryBackoffMs="100"
                maxRetryBackoffMs="100"
                topic="your topic"
                source="your source"
                timeFormat="yyyy-MM-dd'T'HH:mmZ"
                timeZone="UTC"
                ignoreExceptions="true">
            <PatternLayout pattern="%d %-5level [%thread] %logger{0}: %msg"/>
        </Loghub>
    </Appenders>
    <Loggers>
        <Root level="warn">
            <AppenderRef ref="Loghub"/>
        </Root>
    </Loggers>

    projectlogStoreendpointaccessKeyIdaccessKeySecret の各パラメーターは必須です。オプションのパラメーターは、指定がない場合デフォルト値が使用されます。以下の表に各パラメーターの説明を示します。

    パラメーター

    説明

    project

    Simple Log Service プロジェクトの名称です。

    logStore

    Simple Log Service の Logstore の名称です。

    endpoint

    Simple Log Service のパブリックエンドポイントです。詳細については、「エンドポイント」をご参照ください。

    accessKeyId

    AccessKey ID です。取得方法については、「AccessKey ペアの作成」をご参照ください。

    accessKeySecret

    AccessKey シークレットです。取得方法については、「AccessKey ペアの作成」をご参照ください。

  3. サンプルコードです。

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class Log4j2AppenderExample {
    
        private static final Logger LOGGER = LogManager.getLogger(Log4j2AppenderExample.class);
    
        public static void main(String[] args) throws InterruptedException {
            LOGGER.trace("log4j2 trace log");
            LOGGER.debug("log4j2 debug log");
            LOGGER.info("log4j2 info log");
            LOGGER.warn("log4j2 warn log");
            LOGGER.error("log4j2 error log", new RuntimeException("Runtime Exception"));
            Thread.sleep(1000 * 5);
        }
    }

Logtail

image
重要

Logtail を構成する際には、ファイルパスを指定する必要があります。アプリケーションがログファイルにログを書き込めるようにしてください。

Elastic Compute Service (ECS) インスタンスと Simple Log Service プロジェクトが同一アカウントおよび同一リージョンにある場合は、「サーバーからのテキストログの収集」をご参照ください。その他のシナリオについては、「サーバーからのテキストログ収集のための Logtail の手動インストール」をご参照ください。

ステップ 3:ログの確認

  1. Simple Log Service コンソール にログインします。

  2. Projects セクションで、目的のプロジェクトをクリックします。

    image

  3. ログストレージ > Logstore タブで、目的の Logstore をクリックします。

    image

  4. ログデータが正常にアップロードされていることを確認します。Logstore 内で、「検索および分析のクイックスタート」をご参照のうえ、消費プレビュー をクリックして、ログを素早く表示します。

    image

  5. ログのクエリおよび分析を行います。

    重要

    ログのクエリおよび分析を行う前に、Logstore に対して インデックスを作成 する必要があります。インデックスの作成方法の詳細については、「インデックスの作成」をご参照ください。

    クエリ文を入力し、時間範囲(例:過去 15 分間)を選択します。 以下のサンプルはログエントリを示しています。

    level: ERROR
    location: com.aliyun.openservices.log.log4j.example.Log4jAppenderExample.main(Log4jAppenderExample.java:16)
    message: error log
    throwable: java.lang.RuntimeException: xxx
    thread: main
    time: 2018-01-02T03:15+0000
    log: 0 [main] ERROR com.aliyun.openservices.log.log4j.example.Log4jAppenderExample - error log
    __source__: xxx
    __topic__: yyy

    Logstore ページでログのクエリおよび分析を行います。

    image

    クエリ文を入力して、ログデータの表示、検索、フィルター処理が可能です。詳細については、「ログのクエリおよび分析」をご参照ください。以下に簡単なクエリ文の例を示します。

    • 過去 1 時間におけるエラー数が最も多い上位 3 つの場所を検索します。

      level: ERROR | select location ,count(*) as count GROUP BY  location  ORDER BY count DESC LIMIT 3
    • 過去 15 分間における各ログレベルのログ数をカウントします。

      | select level ,count(*) as count GROUP BY level ORDER BY count DESC

関連トピック