S2JavelinTraceInterceptor は、Javaで実装された S2Javelin
に含まれる JavelinTraceInterceptor を PHP に移植したものです。S2JavelinTraceInterceptor によって出力されるトレースログは、
ArrowVision という表示用ツールによりビジュアルに表示することができます。
ArrowVisionは、エスエムジー株式会社のホームページから、
無償でダウンロードすることができます。
s2base.php5/app/commons/dicon/javelin.dicon に S2JavelinTraceInterceptor コンポーネントを定義済みの ダイコンファイルがあります。
このダイコンファイルをアクションダイコンやサービスダイコンで include し、S2JavelinTraceInterceptor をアスペクトすることができます。
ログファイルは、logFile プロパティで指定します。デフォルトでは、s2base.php5/var/logs/javelin.jvn です。(拡張子は .jvn として下さい。)
javelin.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components namespace="javelin">
<component name="javelinTraceInterceptor"
class="S2JavelinTraceInterceptor">
<property name="logArgs">true</property>
<property name="logReturn">true</property>
<property name="logStackTrace">false</property>
<property name="logFile">S2BASE_PHP5_VAR_DIR . "/logs/javelin.jvn"</property>
</component>
</components>
サービスダイコン
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components>
<include path="%S2BASE_PHP5_ROOT%/app/commons/dicon/dao.dicon"/>
<include path="%S2BASE_PHP5_ROOT%/app/commons/dicon/javelin.dicon"/>
<component class="CdServiceImpl">
<aspect pointcut="addCd">javelin.javelinTraceInterceptor</aspect>
</component>
<component class="CdDao">
<aspect pointcut="insert">javelin.javelinTraceInterceptor</aspect>
<aspect>dao.interceptor</aspect>
</component>
</components>
S2Container のログ設定で log4php を使用する設定とすると、S2JavelinTraceInterceptor は、シーケンス情報に加えて S2Dao が発行する SQL を取得することができます。
SQL ログは ArrowVision で表示できます。
log4php 用の設定ファイルは、s2base.php5/config/log4php.properties にあります。
; [[ S2JavelinTraceInterceptor ]]
log4php.category.S2JavelinTraceInterceptor = "DEBUG, Javelin"
log4php.appender.Javelin = "LoggerAppenderFile"
log4php.appender.Javelin.File = "/tmp/javelin.jvn"
log4php.appender.Javelin.layout = "S2JavelinPatternLayout"
log4php.appender.Javelin.layout.ConversionPattern = "%m%n"
; [[ S2Dao Logger ]]
log4php.category.S2Dao_BasicSelectHandler = "DEBUG, DaoSql"
log4php.category.S2Dao_InsertAutoHandler = "DEBUG, DaoSql"
log4php.category.S2Dao_UpdateAutoHandler = "DEBUG, DaoSql"
log4php.category.S2Dao_DeleteAutoHandler = "DEBUG, DaoSql"
log4php.appender.DaoSql = "LoggerAppenderFile"
log4php.appender.DaoSql.layout = "S2JavelinPatternLayout"
; [[ S2Dao Javelin ]]
log4php.appender.DaoSql.File = "/tmp/javelin.jvn"
log4php.appender.DaoSql.layout.ConversionPattern = "Write ,%d{Y/m/d H:i:s u},,DaoSQL,0,%M,%C,0,public,%t%n
<<javelin.FieldValue_START>>%n%m%n<<javelin.FieldValue_END>>%n%n"
ログファイルはデフォルトで /tmp/javelin.jvn となります。S2Container のログ設定や log4php の設定は
s2base.php/config/environment.inc.php の Log setting で行います。
<?php
・・・
・・・
・・・
/**
* Log level setting
*/
define('S2CONTAINER_PHP5_LOG_LEVEL', S2Container_SimpleLogger::DEBUG);
・・・
・・・
・・・
/**
* log4php setting
*/
S2Container_S2LogFactory::$LOGGER = S2Container_S2LogFactory::LOG4PHP;
define('LOG4PHP_DIR', S2BASE_PHP5_ROOT . '/lib/log4php-version/src/log4php');
define('LOG4PHP_CONFIGURATION', S2BASE_PHP5_ROOT . '/config/log4php.properties');
require_once(LOG4PHP_DIR . '/LoggerManager.php');
?>
S2CONTAINER_PHP5_LOG_LEVEL 定数を DEBUG レベルに設定することで、S2Dao が発行する SQL をロギングすることができます。
|