ログ¶
項目
概要¶
内部統制、セキュリティ確保や保守などの目的からログを出力します。この項目では TERASOLUNA Server Framework for Java (5.x) for Accel Platform で行うログの実装について記述します。
Logger APIを利用する¶
Logger(jp.co.intra_mart.common.platform.log.Logger)の使用方法について記述します。
Loggerオブジェクトを取得する¶
public int add(final int value1, final int value2) { // ロガーインスタンスを取得 // ロガー名を指定していないため、クラス名がロガー名となる // クラス名:tutorial.controller.AddController // ロガー名:tutorial.controller.AddController final Logger logger = Logger.getLogger(); return 0; }Logger#getLogger()メソッドを利用してLoggerオブジェクトを取得します。引数に渡す文字列がロガーの名前として使用されます。引数に何も渡さない場合は、呼び出したクラス名(FQCN)がロガーの名前として使用されます。
ログを出力する¶
public int add(final int value1, final int value2) { // ロガーインスタンスを取得 // ロガー名を指定していないため、クラス名がロガー名となる // クラス名:tutorial.controller.AddController // ロガー名:tutorial.controller.AddController 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.c.AddController - arguments=[1, 2]ログレベルtraceでadd(1, 2)を実行した場合は以下のように出力されます。[DEBUG] t.c.AddController - arguments=[1, 2] [TRACE] t.c.AddController - 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.controller.AddController // ロガー名:tutorial.controller.AddController 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.c.AddController - add arguments=[1, 2] [TRACE] t.c.AddController - add result=3
TERASOLUNA Server Framework for Java (5.x) for Accel Platform のログ出力設定について¶
WEB-INF/conf/log/im_logger_tgfw.xml にログ出力の設定を記載しています。標準で、 WEB-INF/log/platform/im_tgfw.log ファイルにログを出力します。運用環境に合わせて設定を変更してください。標準の設定は以下の通りです。
ロガー名 ログレベル jp.co.intra_mart.framework.extension.spring warn jp.co.intra_mart.system.router.spring warn org.springframework warn org.springframework.web.servlet info org.terasoluna.gfw info org.terasoluna.gfw.common.exception.ExceptionLogger info org.terasoluna.gfw.common.exception.ExceptionLogger.Monitoring none
TERASOLUNA Server Framework for Java (5.x) の TraceLoggingInterceptor を利用する。¶
TraceLoggingInterceptorは、リクエストURLにマッピングされたメソッドの処理時間を出力する機能です。TERASOLUNA Server Framework for Java (5.x) for Accel Platform では、 applicationContext-im_tgfw_web.xml と im_logger_tgfw.xml に設定をすることによって、この機能を利用できます。TraceLoggingInterceptor の詳細については、 TERASOLUNA Server Framework for Java (5.x) Development Guideline の TraceLoggingInterceptorの項 を参考にしてください。applicationContext-im_tgfw_web.xml の設定mvc:interceptorsにTraceLoggingInterceptorの設定を追加します。<!-- MVC interceptors --> <mvc:interceptors> <!-- 中略 --> <!-- TraceLoggingInterceptorを追加する。 --> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="org.terasoluna.gfw.web.logging.TraceLoggingInterceptor"> <property name="warnHandlingNanos" value="1000000000" /> </bean> </mvc:interceptor> </mvc:interceptors>コラム
mvc:mapping の path 属性は、トレースログを出力する対象の Controller クラスのパッケージに絞って設定してください。im_logger_tgfw.xml の設定org.terasoluna.gfw.web.logging.TraceLoggingInterceptor のログ出力設定を追加します。<logger name="org.terasoluna.gfw.web.logging.TraceLoggingInterceptor" additivity="false"> <level value="trace" /> <appender-ref ref="IM_TGFW" /> </logger>