f
| MAP | PTLog ドキュメント > チュートリアル > PTLog Basic > 固有のログタイプ | << | >> |
本節では、 分類のための固有のログタイプの定義方法を説明します。
デモンストレーション実装のbasic.type パッケージに属するクラス群も参照してください。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
| 表記 | 完全名 |
|---|---|
| InfoLogType | jp.ne.dti.lares.foozy.ptlog.InfoLogType |
| LevelTypeConverterFactory | jp.ne.dti.lares.foozy.ptlog.logapi.LevelTypeConverterFactory |
| Log | jp.ne.dti.lares.foozy.ptlog.Log |
| LogAPIProvider | jp.ne.dti.lares.foozy.ptlog.logapi.LogAPIProvider |
| LogBuffer | jp.ne.dti.lares.foozy.ptlog.LogBuffer |
| LogTap | jp.ne.dti.lares.foozy.ptlog.LogTap |
| LogType | jp.ne.dti.lares.foozy.ptlog.LogType |
| PropertiesConverterConfig | jp.ne.dti.lares.foozy.ptlog.PropertiesConverterConfig |
| ServiceProvider | jp.ne.dti.lares.foozy.ptlog.ServiceProvider |
| TypeConverter | jp.ne.dti.lares.foozy.ptlog.TypeConverter |
| UniversalFormatter | jp.ne.dti.lares.foozy.ptlog.format.UniversalFormatter |
LogType の定義固有の LogType 定義はとても簡単です。
InfoLogType の派生クラスの例を以下に示します。
public class SQLInfoLogType
extends InfoLogType
{
// 資源効率上、以下の値を使用する
final static
public SQLInfoLogType INSTANCE = new SQLInfoLogType();
public SQLInfoLogType(){
super();
}
}
LogTypeLog および LogTap の拡張これで、簡素ではないながらも、 以下のようなコードにより、 固有タイプによるログ要求を発行できます。
public void doSomething(){
Log log = TAP.getLog("doSomething");
log.info("Info 型によるログ");
log.log(SQLInfoLogType.INSTANCE,
"SQLInfo 型によるログ");
}
以下のような Log カスタマイズにより、
このような煩雑さを減少させることが出来ます。
public class CustomLog
extends Log
{
....
final
public void sqlInfo(Object data){
log(SQLInfoLogType.INSTANCE,
data);
}
final
public void sqlInfo(String message,
Throwable throwable)
{
log(SQLInfoLogType.INSTANCE,
message,
throwable);
}
final
public LogBuffer forSQLInfo(){
// デフォルトフォーマッタを使用
return getLogBuffer(SQLInfoLogType.INSTANCE);
}
final
public LogBuffer forSQLInfo(UniversalFormatter formatter){
return getLogBuffer(SQLInfoLogType.INSTANCE,
formatter);
}
final
public boolean enablesSQLInfo(){
return enables(SQLInfoLogType.INSTANCE);
}
....
}
Log 拡張固有の Log を直接取得出来るように、
LogTap も拡張した方が良いでしょう。
public class CustomTap
extends LogTap
{
....
final
public CustomLog getCustomLog(String method){
return new CustomLog(getContext(),
method,
getFormatter());
}
final
public CustomLog getCustomLog(String method,
UniversalFormatter formatter)
{
return new CustomLog(getContext(),
method,
formatter);
}
....
}
CustomLog のための LogTap 拡張以上の作業により、 以下のようなコードで固有の型によるログ要求を発行できます。
public void doSomething(){
CustomLog log = TAP.getCustomLog("doSomething");
log.sqlInfo("log with SQLInfo type");
}
....
final static
public CustomTap TAP = new CustomTap(Client.class);
固有型によるログ要求を行うクライアントコードは書ける様になりましたが、
ログの型に関する設定はまだです。
例えば、
SQLInfoLogType は
InfoLogType として扱われるため、
他の InfoLogType 派生クラスと同じ
「レベル」でログ記録されます。
PTLog は
LogType から
基底ログフレームワークに固有な任意のオブジェクトへの変換機能を提供します。
このような機構は、
LogAPIProvider 等の基底クラスである
ServiceProvider クラスで提供されています。
本節では、
"*.properties" ファイルを記述することで
ServiceProvider の設定を行うという、
最も簡単な方法に関して説明します。
備考:
型変換の詳細に関しては、
ServiceProvider および
TypeConverter の API ドキュメントを参照してください。
はじめに、 基底ログフレームワークを決定する必要があります。 本節では、JDK Logging API が選択されたものとします。
次に、 以下のような "*.properties" ファイルを書きます。
## これはコンバータのファクトリクラスの別名を指定します。 ## 複数の別名も指定可能です。 ## ## KEY SYNTAX: ptlog.typeConverter.alias.任意の文字列 ## VALUE SYNTAX: 別名|ファクトリクラス完全名 ## ptlog.typeConverter.alias.01 = \ level|jp.ne.dti.lares.foozy.ptlog.logapi.LevelTypeConverterFactory ## これは変換設定を指定します。 ## ## KEY SYNTAX: ptlog.typeConverter.component.任意の文字列 ## VALUE SYNTAX: 別名|LogTypeFQN,レベル値,表示ラベル[,Bundle 名] ## ptlog.typeConverter.component.01 = \ level|your.package.SQLInfoLogType,800,SQLInfo ptlog.typeConverter.component.02 = \ level|your.package.NetworkInfoLogType,799,NetworkInfo ptlog.typeConverter.component.03 = \ level|your.package.LogicInfoLogType,800,LogicInfo ....
LevelTypeConverterFactory は、
指定されたパラメータから JDK Logging API における
Level を生成するファクトリクラスです。
指定されるパラメータは:
LogType 派生クラスの完全名
ですので、
JDK Logging API の設定が
INFO(= level 値 800)レベル以上の要求のみを記録する場合、
上記の設定は、
SQLInfoLogType および LogicInfoLogType
でのログ要求が通る一方で、
NetworkInfoLogType でのログ要求が破棄される結果となります。
備考: 個々の基底ログフレームワーク間の差が、 ファクトリクラス間のパラメータ仕様の差となりますから、 API ドキュメントでファクトリクラスの詳細を参照してください。
PTLog が既に対応しているログフレームワークに関しては、 対応する各パッケージのパッケージ説明文において、 適切な型変換を行うファクトリクラスを示しています。
これまでの設定を元に、以下のような起動を行うことで、 型変換設定を行うことが出来ます。
PropertiesConverterConfig configure = PropertiesConverterConfig.DISALLOW_FAILURE; // 不正設定により例外が浮揚されることを意味します configure.add(LogAPIProvider.INSTANCE, filename); // JDK Logging API との接続点において // "filename" に記述された設定を追加することを意味します。
PropertiesConverterConfig は他にも
"add()" メソッドのシグネチャバリエーションを持っています。
詳細は API ドキュメントを参照してください。
| MAP | PTLog ドキュメント > チュートリアル > PTLog Basic > 固有のログタイプ | << | >> |