ApsaraMQ for RocketMQ でメッセージ配信の失敗やコンシューマーラグをトラブルシューティングする際、クライアントログは主要な診断ツールとなります。Java 向け SDK は、ランタイム例外、接続イベント、およびメッセージライフサイクルの詳細をキャプチャするログファイルを自動的に生成します。
最新の RocketMQ 5.x SDK を使用することを推奨します。これらの SDK は ApsaraMQ for RocketMQ 5.x ブローカーと完全に互換性があり、より多くの機能と機能強化を提供します。詳細については、「Java SDK バージョンガイド」をご参照ください。
Alibaba Cloud は RocketMQ 3.x、4.x、および TCP クライアント SDK のみを保守しています。これらは既存のビジネスでのみ使用することを推奨します。
デフォルトのログ設定
クライアントは、以下のデフォルト設定でログファイルを自動的に生成します。
| 設定項目 | デフォルト値 | カスタマイズ可能 | システムプロパティ |
|---|---|---|---|
| ログ保存パス | /{user.home}/logs/ons.log | Yes | ons.client.logRoot |
| ログレベル | INFO | Yes | ons.client.logLevel |
| 保持されるログファイルの最大数 | 10 | Yes | ons.client.logFileMaxIndex |
| ログファイルサイズ | 64 MB | No | N/A |
デフォルトパスでは、{user.home} は Java プロセスを実行しているアカウントのホームディレクトリです。
ログレベル
有効なログレベルは次のとおりです。
| レベル |
|---|
ERROR |
WARN |
INFO |
DEBUG |
ログ出力の有効化
Java 向け SDK は、ログ記録に SLF4J API を使用します。設定は SDK のバージョンによって異なります。
Java 向け SDK 1.7.8.Final 以降
設定は不要です。これらのバージョンには、ログ出力を自動的に処理する組み込みのログ記録フレームワークが含まれています。
Java 向け SDK 1.7.8.Final より前のバージョン
サポートされているログ記録フレームワーク (Log4j または Logback) への依存関係を、ご利用の pom.xml または .lib ファイルに追加します。
Java 向け SDK 1.7.8.Final 以前のバージョンは、Log4j と Logback のみをサポートしています。Log4j2 はサポートされていません。
ご利用のアプリケーションに Log4j と Logback の両方が含まれている場合、ログ記録の競合によりクライアントログが正しく出力されません。いずれか 1 つのログ記録フレームワークのみを使用してください。競合を特定するには、以下を実行します。
mvn clean dependency:tree | grep logこれらの制限を回避するには、Java 向け SDK の最新バージョンにアップグレードしてください。
クライアントログのカスタマイズ
カスタムログ設定には、Java 向け SDK 1.2.5 以降が必要です。
Java システムプロパティは、起動スクリプトまたは統合開発環境 (IDE) の仮想マシン (VM) オプションで、-D フラグを介して渡します。
利用可能なプロパティ
| プロパティ | 説明 | 有効な値 |
|---|---|---|
ons.client.logRoot | ログファイルディレクトリ | ご利用のシステム上の書き込み可能なパス |
ons.client.logLevel | 最小ログレベル | ERROR、WARN、INFO、DEBUG |
ons.client.logFileMaxIndex | 保持されるログファイルの最大数 | 1 ~ 100 (値が範囲外または無効な場合は 10 にデフォルト設定されます) |
例
Linux または macOS:
-Dons.client.logRoot=/home/admin/logs -Dons.client.logLevel=WARN -Dons.client.logFileMaxIndex=20Windows:
-Dons.client.logRoot=D:\logs -Dons.client.logLevel=WARN -Dons.client.logFileMaxIndex=20/home/admin/logs および D:\logs を、ご利用のシステム上の実際のディレクトリに置き換えてください。アプリケーションプロセスは、指定されたパスに対する書き込み権限を持っている必要があります。そうでない場合、ログは出力されません。
ログ記録の問題のトラブルシューティング
| 症状 | 原因 | 解決方法 |
|---|---|---|
| ログファイルが生成されない | ロギングフレームワークの依存関係が不足している(SDK バージョンが 1.7.8.Final より前の場合) | pom.xml |
| ログ出力が空または欠落している | クラスパス上に Log4j と Logback の両方が存在している | いずれか一方のフレームワークを削除します。mvn clean dependency:tree を実行し、出力結果から log を検索して競合を特定します。 |
| ログが想定外のディレクトリに書き込まれる | デフォルトの {user.home} がランタイム時に異なるパスに解決される | ons.client.logRoot を明示的に、既知のパスに設定します。 |
| ログファイルが無制限に増大する | デフォルトの保持設定では、最大 10 個のログファイル(各 64 MB、合計 640 MB)が保持される | ons.client.logFileMaxIndex の値を小さく設定するか、外部のログローテーションを構成します。 |