1.2. アプリケーションロガーの取得
Red Hat build of Quarkus でアプリケーションロガーを取得するには、次のいずれかの方法を選択します。
1.2.1. ロガーフィールドを宣言する
この従来のアプローチでは、特定の API を使用してロガーインスタンスを取得し、それをクラスの静的フィールドに格納し、このインスタンスに対してロギング操作を呼び出します。
サポートされているロギング API であれば、同じフローを適用できます。
JBoss Logging API を使用してロガーインスタンスを静的フィールドに保存する例:
package com.example; import org.jboss.logging.Logger; public class MyService { private static final Logger log = Logger.getLogger(MyService.class); 1 public void doSomething() { log.info("It works!"); 2 } }
1.2.2. ロギングを簡素化する
Quarkus は、io.quarkus.logging.Log
を使用するクラスにロガーフィールドを自動的に追加することで、ロギングを簡素化します。これにより、反復的なボイラープレートコードが不要になり、ロギング設定の利便性が向上します。
静的メソッド呼び出しを使用した簡素化されたロギングの例:
package com.example; import io.quarkus.logging.Log; 1 class MyService { 2 public void doSomething() { Log.info("Simple!"); 3 } }
- 1
io.quarkus.logging.Log
クラスには、JBoss Logging と同じメソッドが含まれます。ただし、それがstatic
である点は異なります。- 2
- クラスはロガーフィールドを宣言しないことに注意してください。これは、アプリケーションのビルド中に、
Log
API を使用する各クラスにprivate static final org.jboss.logging.Logger
フィールドが自動的に作成されるためです。Log
メソッドを呼び出すクラスの完全修飾名は、ロガー名として使用されます。この例のロガー名はcom.example.MyService
です。 - 3
- 最後に、
Log
メソッドへの呼び出しはすべて、アプリケーションのビルド中にロガーフィールドに対する通常の JBoss Logging 呼び出しに書き換えられます。
Log
API は、外部の依存関係ではなく、アプリケーションクラスでのみ使用してください。ビルド時に Quarkus が処理しない Log
メソッド呼び出しは、例外を出力します。
1.2.3. 設定されたロガーを注入する
@Inject
アノテーションを使用して、設定済みの org.jboss.logging.Logger
ロガーインスタンスを注入する方法は、アプリケーションアプリケーションロガーを追加する場合の代替手段ですが、これを適用できるのは CDI Bean のみです。
ロガーの名前は、@Inject Logger log
を使用すると注入するクラスにちなんだ名前、@Inject @LoggerName("…") Logger log
を使用すると特定の名前になります。注入が完了すると、log
オブジェクトを使用してロギングメソッドを呼び出せます。
2 種類のロガーインジェクションの例:
package com.example; import org.jboss.logging.Logger; @ApplicationScoped class SimpleBean { @Inject Logger log; 1 @LoggerName("foo") Logger fooLog; 2 public void ping() { log.info("Simple!"); fooLog.info("Goes to _foo_ logger!"); } }
ロガーインスタンスは内部的にキャッシュされます。したがって、たとえば @RequestScoped
Bean にロガーが注入されると、挿入されると、ロガーのインスタンス化に関連してパフォーマンスが低下することを回避するために、そのロガーはすべての Bean インスタンスで共有されます。