第 4 章 LOGGING
4.5. 国際化と現地語化
4.5.2. JBoss Logging Tools の国際化および現地語化
JBoss Logging Tools は、ログメッセージ、例外メッセージ、および汎用文字列の国際化や現地語化の
サポートを提供する Java API です。JBoss Logging Tools は翻訳のメカニズムを提供するだけでなく、
各ログメッセージに対して一意な識別子のサポートも提供します。
国際化されたメッセージと例外は、org.jboss.logging.annotations アノテーションが付けられたイン ターフェース内でメソッド定義として作成されます。インターフェースを実装する必要はありません。
JBoss Logging Tools がコンパイル時にインターフェースを実装します。定義すると、これらのメソッ
ドを使用してコードでメッセージをログに記録したり、例外オブジェクトを取得したりできます。
JBoss Logging Tools によって作成される国際化されたロギングインターフェースや例外インター
フェースは、特定の言語や地域に対する翻訳が含まれる各バンドルのプロパティーファイルを作成して 現地語化されます。JBoss Logging Tools は、トランスレーターが編集できる各バンドル対してテンプ レートプロパティーファイルを生成できます。
JBoss Logging Tools は、プロジェクトの対象翻訳プロパティーファイルごとに各バンドルの実装を作
成します。必要なのはバンドルに定義されているメソッドを使用することのみで、JBoss Logging
Tools は現在の地域設定に対して正しい実装が呼び出されるようにします。
メッセージ ID とプロジェクトコードは各ログメッセージの前に付けられる一意の識別子です。この一 意の識別子をドキュメントで使用すると、ログメッセージの情報を簡単に検索することができます。適 切なドキュメントでは、メッセージが書かれた言語に関係なく、ログメッセージの意味を識別子から判 断できます。
JBoss Logging Tools には次の機能のサポートが含まれます。
MessageLogger
org.jboss.logging.annotations パッケージ内のこのインターフェースは、国際化されたログメッ セージを定義するために使用されます。メッセージロガーインターフェースは @MessageLogger アノテーションが付けられます。
MessageBundle
このインターフェースは、翻訳可能な汎用メッセージと国際化されたメッセージが含まれる例外オ ブジェクトを定義するために使用できます。メッセージバンドルは、ログメッセージの作成には使 用されません。メッセージバンドルインターフェースは、@MessageBundle アノテーションが付け られます。
国際化されたログメッセージ 国際化されたログメッセージ
これらのログメッセージは、MessageLogger のメソッドを定義して作成されます。メソッドは
@LogMessage アノテーションと @Message アノテーションを付け、@Message の値属性を使用 してログメッセージを指定する必要があります。国際化されたログメッセージはプロパティーファ イルで翻訳を提供することによりローカライズされます。
JBoss Logging Tools はコンパイル時に各翻訳に必要なロギングクラスを生成し、ランタイム時に現
ロケールに対して適切なメソッドを呼び出します。
国際化された例外 国際化された例外
国際化された例外は、MessageBundle で定義されたメソッドから返された例外オブジェクトです。
これらのメッセージバンドルは、デフォルトの例外メッセージを定義するためにアノテーションを 付けることができます。デフォルトのメッセージは、現在のロケールと一致するプロパティーファ イルに翻訳がある場合にその翻訳に置き換えられます。国際化された例外にも、プロジェクトコー ドとメッセージ ID を割り当てることができます。
国際化されたメッセージ 国際化されたメッセージ
国際化されたメッセージは、MessageBundle で定義されたメソッドから返された文字列です。
Java String オブジェクトを返すメッセージバンドルメソッドは、その文字列のデフォルトの内容
(メッセージと呼ばれます) を定義するためにアノテーションを付けることができます。デフォルト のメッセージは、現在のロケールと一致するプロパティーファイルに翻訳がある場合にその翻訳に 置き換えられます。
翻訳プロパティーファイル 翻訳プロパティーファイル
翻訳プロパティーファイルは、1 つのロケール、国、バリアントに対する 1 つのインターフェースの メッセージの翻訳が含まれる Java プロパティーファイルです。翻訳プロパティーファイルは、メッ セージを返すクラスを生成するために JBoss Logging Tools によって使用されます。
JBoss Logging Tools のプロジェクトコードのプロジェクトコード
プロジェクトコードはメッセージのグループを識別する文字列です。プロジェクトコードは各ログ メッセージの最初に表示され、メッセージ ID の前に付けられます。プロジェクトコードは
@MessageLogger アノテーションの projectCode 属性で定義されます。
注記 注記
新しいログメッセージプロジェクトコード接頭辞の完全なリストは、JBoss EAP 7.3 で使用されているプロジェクトコードを参照してください。
JBoss Logging Tools のメッセージのメッセージ ID
メッセージ ID はプロジェクトコードと組み合わせてログメッセージを一意に識別する数字です。
メッセージ ID は各ログメッセージの最初に表示され、メッセージのプロジェクトコードの後に付け られます。メッセージ ID は @Message アノテーションの ID 属性で定義されます。
JBoss EAP に同梱される logging-tools クイックスタートは、JBoss Logging Tools の多くの機能の例 を提供する単純な Maven プロジェクトです。以降のコード例は、logging-tools クイックスタートから 取得されました。
4.5.3. 国際化されたロガー、メッセージ、例外の作成
4.5.3.1.
国際化されたログメッセージの作成 国際化されたログメッセージの作成
JBoss Logging Tools を使用して MessageLogger インターフェースを作成することにより、国際化さ れたログメッセージを作成できます。
注記 注記
ここでは、ログメッセージのすべてのオプション機能または国際化について説明しませ ん。
1. JBoss EAP Maven レポジトリーを使用するよう Maven を設定します (まだそのように設定して いない場合)。
詳細は、「Maven 設定を使用した JBoss EAP Maven リポジトリーの設定」を参照してくださ い。
2. JBoss Logging Tools を使用するようプロジェクトの pom.xml ファイルを設定します。
詳細は、「JBoss Logging Tools の Maven 設定」を参照してください。
3. ログメッセージ定義を含めるために Java インターフェースをプロジェクトに追加して、メッ セージロガーインターフェースを作成します。
定義するログメッセージの内容がわかるようインターフェースに名前を付けます。ログメッ
定義するログメッセージの内容がわかるようインターフェースに名前を付けます。ログメッ セージインターフェースの要件は次のとおりです。
@org.jboss.logging.annotations.MessageLogger アノテーションを付ける必要がありま す。
オプションで、org.jboss.logging.BasicLogger を拡張できます。
インターフェースと同じ型のメッセージロガーであるフィールドをインターフェースで定 義する必要があります。これは、@org.jboss.logging.Logger の getMessageLogger() を 使用して行います。
例
例
:メッセージロガーの作成 メッセージロガーの作成
4. 各ログメッセージのインターフェースにメソッド定義を追加します。
ログメッセージの各メソッドにその内容を表す名前を付けます。各メソッドの要件は次のとお りです。
メソッドは void を返す必要があります。
@org.jboss.logging.annotation.LogMessage アノテーションを付ける必要があります。
@org.jboss.logging.annotations.Message アノテーションを付ける必要があります。
デフォルトのログレベルは INFO です。
@org.jboss.logging.annotations.Message の値属性にはデフォルトのログインメッセー ジが含まれます。このメッセージは翻訳がない場合に使用されます。
5. メッセージをログに記録する必要があるコードで呼び出しをインターフェースメソッドに追加 してメソッドを呼び出します。
インターフェースの実装を作成する必要はありません。これは、プロジェクトがコンパイルさ れる時にアノテーションプロセッサーにより行われます。
カスタムのロガーは BasicLogger からサブクラス化されるため、BasicLogger のロギングメ package com.company.accounts.loggers;
import org.jboss.logging.BasicLogger;
import org.jboss.logging.Logger;
import org.jboss.logging.annotations.MessageLogger;
@MessageLogger(projectCode="")
interface AccountsLogger extends BasicLogger {
AccountsLogger LOGGER = Logger.getMessageLogger(
AccountsLogger.class,
AccountsLogger.class.getPackage().getName() );
}
@LogMessage
@Message(value = "Customer query failed, Database not available.") void customerQueryFailDBClosed();
AccountsLogger.LOGGER.customerQueryFailDBClosed();
カスタムのロガーは BasicLogger からサブクラス化されるため、BasicLogger のロギングメ ソッドを使用することもできます。国際化されていないメッセージをログに記録するために他 のロガーを作成する必要はありません。
6. プロジェクトで、現地語化できる 1 つ以上の国際化されたロガーがサポートされるようになり ます。
注記 注記
JBoss EAP に同梱される logging-tools クイックスタートは、JBoss Logging Tools の使 用例を提供する単純な Maven プロジェクトです。
4.5.3.2.
国際化されたメッセージの作成と使用 国際化されたメッセージの作成と使用
この手順では、国際化された例外を作成および使用する方法を示します。
注記 注記
本項では、これらのメッセージの現地語化に関するすべてのオプション機能またはプロ セスについて説明しません。
1. JBoss EAP Maven レポジトリーを使用するよう Maven を設定します (まだそのように設定して いない場合)。詳細は、「Maven 設定を使用した JBoss EAP Maven リポジトリーの設定」を参 照してください。
2. JBoss Logging Tools を使用するようプロジェクトの pom.xml ファイルを設定します。詳細 は、「JBoss Logging Tools の Maven 設定」を参照してください。
3. 例外のインターフェースを作成します。JBoss Logging Tools はインターフェースで国際化され たメッセージを定義します。含まれるメッセージのインターフェースにその内容を表す名前を 付けます。インターフェースの要件は以下のとおりです。
public として宣言する必要があります。
@org.jboss.logging.annotations.MessageBundle アノテーションを付ける必要がありま す。
インターフェースと同じ型のメッセージバンドルであるフィールドをインターフェースが 定義する必要があります。
例
例
: MessageBundleインターフェースの作成 インターフェースの作成
注記 注記
AccountsLogger.LOGGER.error("Invalid query syntax.");
@MessageBundle(projectCode="") public interface GreetingMessageBundle { GreetingMessageBundle MESSAGES =
Messages.getBundle(GreetingMessageBundle.class);
}