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();
}
}
Log
および 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
を直接取得出来るように、
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); } .... }
以上の作業により、 以下のようなコードで固有の型によるログ要求を発行できます。
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 > 固有のログタイプ | << | >> |