intra-mart Accel Platform スクリプト開発モデル プログラミングガイド 第15版 2018-08-01

ログ

概要

内部統制、セキュリティ確保や保守などの目的からログを出力します。
この項目では スクリプト開発モデル で行うログの実装について記述します。

Logger APIを利用する

ログレベル

Logger APIでは5つのログレベルが提供されています。
trace(最も軽微)
debug
info
warn
error(最も重大)

Loggerオブジェクトを取得する

function add(value1, value2) {
    // ロガーオブジェクトを取得
    // ロガー名を指定していないため、ファイル名がロガー名となる
    // ファイルの配置場所 : %CONTEXT_PATH%/WEB-INF/jssp/src/foo/bar/logger_sample.js
    // ロガー名 : 'foo.bar.logger_sample'
    var logger = Logger.getLogger();
}
Logger.getLoggerメソッド()を利用してLoggerオブジェクトを取得します。引数に渡す文字列がロガーの名前となります。
引数に何も渡さない場合は、このメソッドを呼び出したJSファイルのソースパスを元に作成されます。具体的には、JSファイルのソースパスのファイル区切りを「.」に置き換えた文字列をロガー名とします。なお、JSファイルのソースパスとは、ソース検索ディレクトリからの相対パス(拡張子なし)を意味します。

ログを出力する

function add(value1, value2) {
    // ロガーオブジェクトを取得
    // ロガー名を指定していないため、ファイル名がロガー名となる
    // ファイルの配置場所 : %CONTEXT_PATH%/WEB-INF/jssp/src/foo/bar/logger_sample.js
    // ロガー名 : 'foo.bar.logger_sample'
    var logger = Logger.getLogger();

    logger.debug('arguments=[{}, {}]', value1, value2);
    var result = value1 + value2;
    logger.trace('result={}', result);

    return result;
}
Loggerオブジェクトを利用してログの出力を行います。
上記の関数では、引数に渡された値がdebugレベルで、計算結果がtraceレベルで出力しています。
ログレベルdebugでadd(1, 2)を実行した場合は以下のような出力になります。
[DEBUG] f.b.logger_sample - arguments=[1, 2]
ログレベルtraceでadd(1, 2)を実行した場合は以下のような出力になります。
[DEBUG] f.b.logger_sample - arguments=[1, 2]
[TRACE] f.b.logger_sample - result=3

LoggerMDC APIを利用する

MDC

Mapped Diagnostic Context(マップ化された診断コンテキスト)を利用することにより、ログ設定ファイルのレイアウト設定で独自に定義したkeyで保存した情報をログに出力することが可能となります。
LoggerMDC APIを利用することにより、独自に定義したkeyへの情報の書き込みが可能となります。

MDCを利用したログを出力する

// MDCのキーを定義
var MDC_FUNC_KEY = 'application.func';
function add(value1, value2) {
    // ロガーオブジェクトを取得
    // ロガー名を指定していないため、ファイル名がロガー名となる
    // ファイルの配置場所 : %CONTEXT_PATH%/WEB-INF/jssp/src/foo/bar/logger_sample.js
    // ロガー名 : 'foo.bar.logger_sample'
    var logger = Logger.getLogger();

    // MDCに値を設定
    LoggerMDC.put(MDC_FUNC_KEY, 'add');

    logger.debug('arguments=[{}, {}]', value1, value2);
    var result = value1 + value2;
    logger.trace('result={}', result);

    // MDCの値を初期化
    LoggerMDC.remove(MDC_FUNC_KEY);

    return result;
}
実行中の関数名をMDCに設定しています。
LoggerMDC.put(key, value)メソッドで、MDCのキー “application.func” に実行中の関数名 “add” を設定しています。
MDCに保存した内容は、明示的に初期化が行われない限り値が初期化されることがありません。
そのため、目的のログ出力処理が完了後にLoggerMDC.remove(key)メソッドで、MDCのキー “application.func” の値を初期化しています。
出力例
%CONTEXT_PATH%/WEB-INF/conf/log/im_logger.xmlの<configuration>/<appender name=”STDOUT”>/<encoder>/<pattern>の内容を以下の通りに変更し、アプリケーションサーバを再起動します。
[%level] %logger{10} - %X{application.func} %msg%n
ログレベルtraceでadd(1, 2)を実行した時のログ出力
[DEBUG] f.b.logger_sample - add arguments=[1, 2]
[TRACE] f.b.logger_sample - add result=3