intra-mart Accel Platform SAStruts+S2JDBC プログラミングガイド 第15版 2018-08-01

ログ

概要

内部統制、セキュリティ確保や保守などの目的からログを出力します。
この項目ではSAStrutsフレームワークで行うログの実装について記述します。

Logger APIを利用する

Logger(jp.co.intra_mart.common.platform.log.Logger)の使用方法について記述します。

ログレベル

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

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

public int add(final int value1, final int value2) {
    // ロガーインスタンスを取得
    // ロガー名を指定していないため、クラス名がロガー名となる
    // クラス名:tutorial.action.AddAction
    // ロガー名:tutorial.aciton.AddAction
    final Logger logger = Logger.getLogger();

    return 0;
}
Logger#getLogger()メソッドを利用してLoggerオブジェクトを取得します。引数に渡す文字列がロガーの名前となります。
引数に何も渡さない場合は、呼び出したクラス名(FQDN)がロガーの名前となります。

ログを出力する

public int add(final int value1, final int value2) {
    // ロガーインスタンスを取得
    // ロガー名を指定していないため、クラス名がロガー名となる
    // クラス名:tutorial.action.AddAction
    // ロガー名:tutorial.aciton.AddAction
    final Logger logger = Logger.getLogger();

    logger.debug("arguments=[{}, {}]", value1, value2);
    final int result = value1 + value2;
    logger.trace("result={}", result);

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

MDC APIを利用する

MDC(jp.co.intra_mart.common.platform.log.MDC)の使用方法について記述します。

MDC

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

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

// MDCのキーを定義
private static final String MKC_FUNC_KEY = "application.func";

public int add(final int value1, final int value2) {
    // ロガーインスタンスを取得
    // ロガー名を指定していないため、クラス名がロガー名となる
    // クラス名:tutorial.action.AddAction
    // ロガー名:tutorial.aciton.AddAction
    final Logger logger = Logger.getLogger();

    // MDCに値を設定
    MDC.put(MKC_FUNC_KEY, "add");

    logger.debug("arguments=[{}, {}]", value1, value2);
    final int result = value1 + value2;
    logger.trace("result={}", result);

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

    return result;
}
実行中の関数名をMDCに設定しています。
MDC#put(key, value)メソッドで、MDCのキー “application.func” に実行中の関数名 “add” を設定しています。
MDCに保存した内容は、明示的に初期化が行われない限り値が初期化されることがありません。
そのため、目的のログ出力処理が完了後にMDC#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] t.a.AddAction - add arguments=[1, 2]
[TRACE] t.a.AddAction - add result=3