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の設定ファイルをプロジェクトに追加する
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>
構成ファイルを変更します。
デフォルトでは、システムはクラスパスパスで構成ファイルを検索します。 設定ファイルが存在しない場合は、手動でファイルを作成する必要があります。 次の例では、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>
ログの出力を開始します。
定義されたアペンダーと出力ログを読み取るためのテストコードを作成します。 サンプルコード:
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"); }
次のサンプルコードは、ログ出力の例を示しています。
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ログを収集する
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>
構成ファイルを変更します。
次の例では、
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ペアの作成」をご参照ください。
デモをテストします。
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ログを収集する
Logtailを設定するときは、ファイルパスを指定する必要があります。 アプリケーションログが期待どおりにログファイルに書き込まれることを確認してください。
Logtailのインストール
Logtailのインストール方法については、「LinuxサーバーへのLogtailのインストール」をご参照ください。
Logtailの設定
Simple Log Serviceは、Logtailの設定に役立つ設定ウィザードを提供します。 詳細については、「サーバーからのテキストログの収集」をご参照ください。
ステップ3: ログの表示
[プロジェクト] セクションで、管理するプロジェクトをクリックします。
左側のナビゲーションウィンドウで、[ログストレージ] をクリックします。 Logstoreリストで、管理するLogstoreをクリックします。
ログがLogstoreにアップロードされているかどうかを確認します。 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ページでログを照会および分析します。
Logtailは
Logstoreページでログを照会および分析します。
クエリステートメントを入力して、ログデータを表示、検索、およびフィルタリングできます。 詳細については、「ログの照会と分析」をご参照ください。 以下の記述は、例として提供される。
前の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
関連ドキュメント
Logtailを使用してサーバーからログを収集する方法については、「サーバーからテキストログを収集する」をご参照ください。 複数のプラグインが利用可能です。 詳細については、「正規表現モードでの解析」をご参照ください。
Logtailを使用してログを収集するときにプレビューページが空白の場合、またはクエリページにデータが表示されない場合は、Logtailを使用してログを収集するときにエラーが発生した場合はどうすればよいですか? トピックを使用します。 Logtailを使用してログを収集すると、エラーが発生する可能性があります。 たとえば、正規表現が解析に失敗する可能性があり、無効なファイルパスが存在する可能性があり、トラフィックがシャードの処理能力を超える可能性があります。 で提供されている手順に従って、Logtail収集エラーを表示できます。Logtail収集エラーの表示方法? トピックを使用します。 データ収集の一般的なエラーについては、Simple Log Serviceがログを収集するときに発生する可能性のある一般的なエラーのトラブルシューティング方法を教えてください。.
Log4j2アペンダーを使用してLog4jログを収集することに関するユースケースとよくある質問 (FAQ) については、「Log4j2アペンダー」をご参照ください。 Log4j2より前のバージョンのLog4jを使用してLog4jログを収集するためのユースケースとFAQについては、「Log4j Appender」をご参照ください。
Log4j2アペンダーを使用してLog4jログを収集する場合は、AccessKeyペアを設定する必要があります。 AccessKeyペアの取得方法については、「AccessKeyペアの作成」をご参照ください。 Simple Log Serviceが提供するエンドポイントを設定する方法については、「エンドポイント」をご参照ください。