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に戻る