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

Simple Log Service:Log4jログの収集

最終更新日:Sep 29, 2024

Log4j2を使用してJavaアプリケーションの操作ログを記録および管理した後、Log4j2アペンダーまたはLogtailを使用して、その後のクエリと分析のためにSimple Log Serviceにログを収集できます。

Log4jの概要

Apache Log4jは、ログ出力先をコンソール、ファイル、GUIコンポーネント、ソケットサーバー、NTイベントレコーダー、またはUNIX Syslogデーモンに設定できるオープンソースプロジェクトです。 Apache Log4jでは、各ログの出力形式を設定し、各ログのレベルを定義して、ログ生成をより詳細に管理することもできます。 上記の機能を構成するには、構成ファイルのみを使用する必要があります。 アプリケーションコードを変更する必要はありません。 Log4jは、次の主要コンポーネントで構成されます。

  • レイアウト

    レイアウトは、ログを特定の形式にフォーマットするために使用されます。 共通レイアウトを次の表に示します。

    レイアウト

    説明

    HTMLLayout

    ログをHTMLテーブルとしてフォーマットします。

    SimpleLayout

    INFOレベルのログなど、単純な形式でログをフォーマットします。

    PatternLayout

    ログをカスタム形式で出力します。 要素の配置や形式 (タイムスタンプ、ログレベル、スレッド名、クラス名、メソッド名、ログデータなど) を指定できます。

  • Appenders

    ログの宛先を定义するために、アプレットが使用されます。 異なる宛先にログを送信するように複数のアプレットを設定できます。 次の表に、共通のアペンダーを示します。

    Appender

    説明

    ConsoleAppender

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

    FileAppender

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

    DailyRollingFileAppender

    毎日新しいファイルにログを出力します。

    RollingFileAppender

    ログを特定のサイズのファイルに出力します。 ファイルが指定されたサイズに達すると、システムは自動的にファイルの名前を変更し、新しいファイルを生成します。

    JDBCAppender

    ログをデータベースに格納します。

  • ロガー

    ロガーは、ログのエントリポイントを定義し、ログ情報をキャプチャするために使用されます。 各ロガーには、その重要度または重大度に基づいてログレベルが割り当てられます。 Log4jは、以下のログレベルを定義する: OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、およびALL (優先度の降順でリストされる) 。 ログレベルは継承できます。 子クラスは、親クラスのすべてのログレベルを記録します。 次の表に、ログレベルを示します。

    ログレベル

    説明

    オフ

    すべてのログを無効にします。

    致命的

    アプリケーションを終了させる可能性のあるエラーイベントを示します。

    ERROR

    システムの実行に影響を与えないエラーイベントを示します。

    WARN

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

    INFO

    アプリケーションの実行に焦点を当てています。 ほとんどの場合、このログレベルは、ログが粗い方法で管理されるシナリオで使用されます。

    デバッグ

    診断を容易にします。 ほとんどの場合、このログレベルはアプリケーションのデバッグシナリオで使用されます。

    トレース

    プログラムの実行中に変数を出力し、実行プロセスを表示します。 このログレベルはプログラムのトレースに使用されます。

    すべて

    すべてのログを印刷します。

説明

ロガーは複数のアペンダに対応できます。 アペンダーは1つのレイアウトにのみ対応できます。

前提条件

  • プロジェクトと Logstore が作成済みである必要があります。 詳細については、「プロジェクトの作成」および「Logstore の作成」をご参照ください。

  • アペンダーを使用してログを収集する場合は、Resource Access Management (RAM) ユーザーを作成し、Simple Log Serviceにデータを書き込む権限をRAMユーザーに付与する必要があります。 詳細については、「権限アシスタント機能の設定」をご参照ください。

手順

説明

このトピックでは、JavaとLog4j2を例で使用します。 Log4jは、C、C ++ などの他のプログラミング言語のプログラムにも使用できます。NET、およびPL/SQL。 他のプログラミング言語のプログラムでLog4jを使用する構文とメソッドは、JavaプログラムでLog4jを使用する構文とメソッドと同じです。

手順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.xmlファイルに2つのアペンダーが定義されています。 アペンダーは、Simple Log Serviceコンソールとapp.logファイルにそれぞれログを出力するために使用されます。 ルートロガーのログレベルはERRORと定義され、ログはSimple log Serviceコンソールに出力されます。 loggerであるcom.example.de mo.logのログレベルをWARNとして, app.logファイルに出力します。 Log4j2の設定方法の詳細については、「Log4j-Log4j 2の設定 (apache.org) 」をご参照ください。

    !" -- status="WARN". The internal status of Log4j2. This parameter is not used to capture and report potential issues during configurations.  -->
    <Configuration status="WARN">
        <! -- Define the two appenders  start  -->
        <Appenders>
            <! -- Define an appender named Console to print logs to system standard output.  -->
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS zzz} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
            <! -- Define an appender named MyFile to print logs to the app.log file. -->
            <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>
        <! -- Define the two appenders   end  -->
    
        <!-- Configure loggers      start  -->
        <Loggers>
            <! -- Define a logger named com.example.demo.log and set the log level to TRACE. The com.example.demo.log logger references the MyFile appender. The logger outputs logs whose levels are TRACE and higher to the MyFile appender.  -->
            <Logger name="com.example.demo.log" level="warn">
                <AppenderRef ref="MyFile" />
            </Logger>
            <!-- Define the root logger and set the log level to ERROR. The root logger references to the Console appender. The logger outputs logs whose levels are ERROR and higher to the Simple Log Service console.  -->
            <Root level="error">
                <AppenderRef ref="Console" />
            </Root>
        </Loggers>
        <!-- Configure loggers      end  -->
    </Configuration>
  3. ログの出力を開始します。

    定義されたアペンダーと出力ログを読み取るためのテストコードを作成します。 サンプルコード:

        public void logExampleDemo() {
            // Obtain the logger named com.example.demo.log.
            Logger logger = LogManager.getLogger("com.example.demo.log");
    
            // Record log data at different levels.
            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: Simple Log ServiceへのLog4jログの収集

説明
  • Log4j2アペンダーは、Log4j2の組み込みのログ収集メソッドです。 Log4j2と統合されているアプリケーションの場合、リアルタイムでログを送信するためのアペンダーを起動するための簡単な設定のみを実行する必要があります。 Log4j2アペンダーは、大量のログデータをリアルタイムで処理する必要があるシナリオに適しています。

  • Logtailを使用してログを収集するには、サーバーにLogtailコンポーネントをインストールする必要があります。 Logtailコンポーネントは、複数の処理プラグインをサポートします。

Log4j2アペンダーを使用してLog4jログを収集する

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>

    上記のサンプルコードでは、プロジェクト、logStore、endpoint、accessKeyId、およびaccessKeySecretパラメーターが必要です。 その他のパラメーターはオプションで、デフォルト値を使用できます。 下表に、各パラメーターを説明します。

    パラメーター

    説明

    project

    Simple Log Serviceプロジェクトの名前。

    logStore

    Simple Log Service Logstoreの名前。

    endpoint

    Simple Log Serviceのパブリックエンドポイント。 エンドポイントの取得方法については、「エンドポイント」をご参照ください。

    accessKeyId

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

    accessKeySecret

    AccessKeyシークレット。 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を使用してLog4jログを収集する

image
重要

Logtailを設定するときは、ファイルパスを指定する必要があります。 アプリケーションログが期待どおりにログファイルに書き込まれることを確認してください。

  1. Logtailのインストール

    Logtailのインストール方法については、「LinuxサーバーへのLogtailのインストール」をご参照ください。

  2. Logtailの設定

    Simple Log Serviceは、Logtailの設定に役立つ設定ウィザードを提供します。 詳細については、「サーバーからのテキストログの収集」をご参照ください。

ステップ3: ログの表示

  1. Simple Log Serviceコンソール.

  2. [プロジェクト] セクションで、管理するプロジェクトをクリックします。

    image

  3. 左側のナビゲーションウィンドウで、[ログストレージ] をクリックします。 Logstoreリストで、管理するLogstoreをクリックします。

    image

  4. ログがLogstoreにアップロードされているかどうかを確認します。 Logstoreでログを照会および分析します。 次に、[消費プレビュー] をクリックしてログを表示します。

    image

  5. データのクエリと分析

    重要

    ログがLogstoreにアップロードされた後、ログを照会および分析するためのインデックスを作成する必要があります。 詳細については、「インデックスの作成」をご参照ください。 インデックスの作成方法については、「インデックスの作成」をご参照ください。

    検索ボックスにクエリステートメントを入力し、[過去15分] をクリックして、クエリ時間範囲を指定します。 次のサンプルコードは、クエリ結果の例を示しています。

    Appender

    次のサンプルコードは、ログの例を示しています。

    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

    Logtailは

    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

関連ドキュメント