2つの方法がございます。
1.LogBackのfilter機能を利用する方法
2.ロガー名の先頭をログイングループ名とする方法
上記の方法につきましてはWebPlatform Ver7.0以降で利用可能です。
【方法1】LogBackのfilter機能を利用する方法
WebPlatform Ver7.0以降に搭載された、LogBackのfilter機能およびJaninoのライブラリを利用する方法です。
LogBackのfilter機能は、簡単にお伝えしますと、なんらかの値を元にログの出力方法を変更する仕組みです。
参考URL
http://logback.qos.ch/manual/filters_ja.html
以下、簡単なサンプルを例示いたします。
添付ファイルもあわせてご参照ください。
●準備
(1) ログイングループごとのログ設定ファイルをコピーして下さい。
conf/log/login_group_for_default_logger.xml
conf/log/login_group_for_hoge_logger.xml
※添付したものは、「default」と「hoge」の二つのログイングループ用に作成されております。
適宜内容を変更してください。
(2) サーブレットフィルタのクラスをコピーして下さい。
doc/imart/WEB-INF/classes/sample/MDCTestFilter.java
(3) web.xmlの編集。
上記サーブレットフィルタを全てのURLに対してマッピングします。
web.xml設定例
<web-app>
・
・
・
<filter>
<filter-name>MDCTestFilter</filter-name>
<filter-class>sample.MDCTestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MDCTestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
・
・
・
<web-app>
(4) Janinoを以下のサイトからダウンロードし、Janino解凍後にライブラリ「janino.jar」を以下のディレクトリにコピーします。
ディレクトリ <%im_path%>/lib/
なお、弊社ではJanino Ver2.5.15にて動作確認を行っております。
https://janino-compiler.github.io/janino/(英語)
(5) <%im_path%>/conf/imart.xmlを以下のように設定してください。
//----
<compiler>
<class>
<archive>
<file/>
</archive>
</class>
</compiler>
・・・
//----
//----
<compiler>
<class>
<archive>
<file/>
<directory>lib</directory>
</archive>
</class>
</compiler>
・・・
//----
---------------------
解説
---------------------
1:サーブレットフィルタ「MDCTestFilter」にてMDCにログイングループidを設定しています。
2:MDCに設定されたログイングループを判定し、ログ出力可否を判定。
(login_group_for_default_logger.xmlの5行目が該当)
上記のサンプルを参考に実装していただければ、LogBackのfilter機能が設定できるかと思います。
なお、LogBackのfilter機能の詳細は、以下をご参照ください。
http://logback.qos.ch/manual/filters.html
【方法2】ロガー名の先頭をログイングループ名とする方法
作成するアプリケーションにて、ロガー名の命名ルールを決めるという方法です。
例えば、以下のように、ロガー名の先頭をログイングループ名に設定します。
----
var logingGroupName = AccessSecurityManager.getSessionInfo().loginGroup;
var logger = Logger.getLogger(logingGroupName + ".foo.bar");
logger.info("message");
----
あとは、設定ファイルで出力先を変更する設定を行います。
例えば、ログイングループ「default」を別ファイルに出力する際は、まず、設定ファイル内のloggerを以下のように設定します。
----
・
・
・
1: <logger name="default" additivity="false">
2: <level value="info" />
3: <appender-ref ref="LOGIN_GROUP_DEFAULT_FILE" />
4: </logger>
・
・
・
----
次に、上記3行目で指定した「LOGIN_GROUP_DEFAULT_FILE」のappenderを定義し、そのAppender内で、出力先を指定します。
なお、intra-martの特定用途ログ(=request.logなど)は、上記と同様の方法で出力先を変更しています。
つまり、ロガー名の先頭に特定の命名ルールを設けて出力先変更しております。
conf/im_logger_request.xmlを参照して頂きますとイメージがとらえやすいかと思いますので合わせてご参照ください。
-- 対象 ------------------------------------------------------------------------
iWP/Webシステム構築基盤/WebPlatform/AppFramework
--------------------------------------------------------------------------------
FAQID:325
ログイングループ毎にログファイルを分けて出力する方法はありますか。