アプリケーションへのロギングの追加
WebSphere® Application Server Liberty アプリケーションを実行している場合、アプリケーション・ロギングの生成に Java ロギング ( java.util.loggingを使用) を使用できます。
MicroProfile テレメトリ機能(バージョン 以降)を単一のソリューションとして使用し、 プロトコルを使用して 2.0 OpenTelemetry 、Liberty アプリケーションのログ、メトリクス、トレースを収集および送信することができます。 詳細は 、 Open Liberty のウェブサイトをご覧ください。
このタスクについて
コードに
System.out.println ステートメント
を追加する方法に比べ、この方法には次のような利点があります。- 自動的に追加される日時スタンプなどの追加データが付いた 標準メッセージ・フォーマットを使用して、メッセージが messages.log および trace.log ファイルに表示されます。
- 独自のアプリケーション内の問題およびイベントを、 Liberty コンポーネントに関連する問題およびイベントにより簡単に相関させることができます。
- Liberty ログ・ファイル管理フィーチャーを使用できます。
- server.xml ファイル内のロギング・エレメントの
traceSpecificationを使用して、ロガー・レベルを制御できます。
手順
ログ・レコードおよびトレース・レコードに名前と値のペアを追加するように
LogRecordContext API を構成します。Liberty には、ログ・レコードおよびトレース・レコードに名前と値のペアの形式でコンテキストを追加するために使用できる API が用意されています。 これらの名前と値のペアは、以下の場所に表示されます。
- そのログが JSON 形式を使用するように構成されている場合は、messages.log ファイル
- コンソールが JSON 形式を使用するように構成されている場合は、コンソール出力
logstashCollectorによってLogstashに送信されるレコード
詳細については 、 LogRecordContext のAPIドキュメントをご覧ください。
JSON 形式を使用して名前と値のペアを組み込むには、次の例を使用します。
LogRecordContext API
Applications that use the LogRecordContext API will have the name-value pairs that have been added to the LogRecordContext included in the JSON mapping for logs and trace emitted on the same thread.
STRING/STRING pairs
// included in json at root level as "ext_someName":"someValue"
LogRecordContext.addExtension("someName","someValue");
STRING/INTEGER pairs
// included in json at root level as "ext_someName_int":someValue (or entirely omitted if someValue isn't parseable as an int)
LogRecordContext.addExtension("someName_int","someValue");
STRING/FLOAT pairs
// included in json at root level as "ext_someName_float":someValue (or entirely omitted if someValue isn't parseable as a float)
LogRecordContext.addExtension("someName_float","someValue");
STRING/BOOLEAN pairs
// included in json at root level as "ext_someName_bool":someValue (or entirely omitted if someValue isn't parseable as a bool)
LogRecordContext.addExtension("someName_bool","someValue");
LogRecordContext API が使用する名前と値のペアを示す以下の例を参照してください。
LogRecordContext.addExtension("userName","don");
LogRecordContext.addExtension("isGoldCustomer_bool":"true");
Logger.info("some message");
LogRecordContext.removeExtension("userName");
LogRecordContext.removeExtension("isGoldCustomer_bool");
Logger.info("some other message");
// first message includes the extensions
{"ibm_datetime":"2018-02-04T18:56:30.318-0500","type":"liberty_message","host":"192.168.1.1","ibm_userDir":"\/wlp\/usr\/","ibm_serverName":"server1","ibm_sequence":"1517788590318_000000003A4A7","loglevel":"INFO","module":"com.ibm.somelogger.QuickLogTest","ibm_threadId":"00002db5","message":"some message", "ext_userName":"don", "isGoldCustomer_bool":true}
// second message does not include extensions
{"ibm_datetime":"2018-02-04T18:56:30.318-0500","type":"liberty_message","host":"192.168.1.1","ibm_userDir":"\/wlp\/usr\/","ibm_serverName":"server1","ibm_sequence":"1517788590318_000000003A4A8","loglevel":"INFO","module":"com.ibm.somelogger.QuickLogTest","ibm_threadId":"00002db5","message":"some other message"}