スポンサード リンク

1.ログの制御

スポンサード リンク

S2Daoを使用した際に、さまざまなログが出力されていると思います。
いろいろな情報を取得するという点では便利なのですが、普段開発をする際にはコミットやロールバック、
実行されているSQLは別として,「物理的なコレクションの取得やクローズ」、「論理的なコネクションの取得やクローズ」
といったコネクション関係の情報はログの量が増えてしまい読みづらくなってしまいます。
そこで今回はログの制御について書いてみたいと思います。

Seasar2ではS2Daoに限らず内部でlog4jを使用しています。
そのため対象のクラスの内容にってlog4jの設定ファイルに記載することでログを制御することができます。
S2Daoでログを出力しているファイルは以下のクラスになります。

クラス 内容
org.seasar.extension.dbcp.impl.ConnectionPoolImpl コネクション取得関連
org.seasar.extension.dbcp.impl.ConnectionWrapperImpl コネクション開放関連
org.seasar.extension.jdbc.impl.BasicHandler SQL出力関連
org.seasar.extension.jta.TransactionImpl トランザクション関連

でわ早速設定して、実行してみたいと思います。
今回はコネクションの取得および開放関連のログの出力レベルをINFOにすることでdebugレベルでは出力されないようにします。
また今回は「log4.properties」のプロパティファイルに記載しますが、「log4.xml」を使用しても同様に制御することができます。
追加する内容は以下のような感じになります。

# コネクション取得関連
log4j.category.org.seasar.extension.dbcp.impl.ConnectionPoolImpl=info, STDOUT
log4j.additivity.org.seasar.extension.dbcp.impl.ConnectionPoolImpl=false
# コネクション開放関連
log4j.category.org.seasar.extension.dbcp.impl.ConnectionWrapperImpl=info, STDOUT
log4j.additivity.org.seasar.extension.dbcp.impl.ConnectionPoolImpl=false
    

追加後のは以下のようになります。

log4j.rootLogger=INFO,STDOUT
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.ImmediateFlush=true
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=%-5p %m%n

log4j.category.org.seasar=debug, STDOUT
log4j.additivity.org.seasar=false
log4j.category.org.seasar.extension.dbcp.impl.ConnectionPoolImpl=info, STDOUT
log4j.additivity.org.seasar.extension.dbcp.impl.ConnectionPoolImpl=false
log4j.category.org.seasar.extension.dbcp.impl.ConnectionWrapperImpl=info, STDOUT
log4j.additivity.org.seasar.extension.dbcp.impl.ConnectionPoolImpl=false
    

それでは早速実行してみたいともいます。
実行する対象はselect文 - 簡単なSQLで実行したソースを再度実行してみます。

実行結果

S2Dao_sample10 開始
DEBUG S2Containerを作成します。path=snowhiro/s2Dao.dicon
DEBUG S2Containerを作成します。path=dao.dicon
DEBUG S2Containerを作成します。path=j2ee.dicon
DEBUG S2Containerを作成します。path=jta.dicon
DEBUG S2Containerを作成しました。path=jta.dicon
DEBUG S2Containerを作成します。path=jdbc.dicon
DEBUG S2Containerを作成しました。path=jdbc.dicon
DEBUG S2Containerを作成しました。path=j2ee.dicon
DEBUG S2Containerを作成しました。path=dao.dicon
DEBUG S2Containerを作成しました。path=snowhiro/s2Dao.dicon
INFO  Running on [ENV]product, [DEPLOY MODE]Normal Mode
DEBUG トランザクションを開始しました。tx=[FormatId=4360, GlobalId=1246029647739/0, BranchId=]
DEBUG SELECT PROJECT.id, PROJECT.PJNAME FROM PROJECT ORDER BY ID
DEBUG トランザクションをコミットしました。tx=[FormatId=4360, GlobalId=1246029647739/0, BranchId=]
 project.id : 1 project.name : S2Dao
 project.id : 2 project.name : S2プロジェクト 入門
 project.id : 3 project.name : S2Dao_SELECT句の説明
 project.id : 4 project.name : S2DaoでselectのWhere句を追加する
    

手を加えるlog4jの前に比べて以下のような部分が出力されなくなっています。

DEBUG 物理的なコネクションを取得しました
DEBUG 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1215618050227/0, BranchId=]
DEBUG 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1215618050227/0, BranchId=]
    

このようにlog4jの調整で、発行されているSQLが確認しやすくなります。



Seasar2 Topに戻る
inserted by FC2 system