こんにちはこんばんは!
株式会社情創 技術開発局
暑くなっても食欲が減らず
焼肉が食べたくて仕方がない@YAKINIKUです!
今回はlog4jdbcについて解説していきます!
#log4jdbcとは
これを使用することでJDBCドライバが発行するクエリのログを簡単に出力することができます。
##設定
それではlog4jdbcに必要なものについて説明していきます。
###postgresのインストール設定
まずはじめにすることはpostgresのインストールですがそれはこちらのサイト等を参考にして設定してください。
http://winofsql.jp/VA003334/infoboard_page.php?mid=install&id=061202151924
(2016年5月段階ではVersion 9.5.3が最新です。)
###build.gradleに下記追加
次に第5回で触れたbuild.gradleに下記の記述を追加します。
compile("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16")
###application.propertiesの設定
devの場合のみlog4jdbcを使用し、production時は使用しないのが一般的なようです。
(dev、productionについては 過去記事appliction.propertiesについて参照)
spring.datasource.url = jdbc:log4jdbc:postgresql://{DBサーバー}:5432/{DBスキーマー}
spring.datasource.driverClassName = net.sf.log4jdbc.sql.jdbcapi.DriverSpy
###/resources の下にファイル作成
/src/mainの下にあるresourcesファイル直下に
log4jdbc.log4j2.propertiesと
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
logback-spring.xmlを作成します。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<!-- log4jdbc-log4j2 -->
<logger name="jdbc.sqlonly" level="DEBUG"/>
<logger name="jdbc.sqltiming" level="INFO"/>
<logger name="jdbc.audit" level="INFO"/>
<logger name="jdbc.resultset" level="ERROR"/>
<logger name="jdbc.resultsettable" level="ERROR"/>
<logger name="jdbc.connection" level="DEBUG"/>
</configuration>
#logbackとは
SLF4J(Simple Logging Facade for Java)のAPIを経由して利用するjavaのロギングライブラリのことです。
実際の出力確認はデータベース接続の章で行うこととします。
##出力項目の説明
上記で記述したlogbackの出力項目についてそれぞれ解説します。
###jdbc.sqltiming
jdbc.sqltimingはバインド変数に値が設定された状態のSQL文と、SQLの実行時間を出力するためのロガーです。
値がバインドされた形式のSQLが出力されるので、DBアクセスツールに貼りつけて実行する事ができるようになっています。
###jdbc.sqlonly
jdbc.sqlonlyはバインド変数に値が設定された状態のSQL文を、出力するためのロガーです。
上記のjdbc.sqltimingとの違いは、実行時間が出力されないという点です。
###jdbc.audit
jdbc.auditはResultSetインタフェースを除く、JDBCインタフェースのメソッド呼び出し(引数と、返り値)を出力するためのロガーです。
JDBC関連で問題が発生した時の解析に有効なログですが、出力されるログの量が多いです。
###jdbc.connection
jdbc.connectionはConnectionの接続/切断イベントと使用中の接続数を出力するためのロガーです。
接続リークが発生時の解析に有効なログではあるのですが、接続リークの問題がなければ、出力する必要はありません。
###jdbc.resultset
jdbc.resultsetはResultSetインタフェースに対するメソッド呼び出し(引数と、返り値)を出力するためのロガーです。
取得結果が、想定と異なった時の解析に有効なログですが、出力されるログの量が多いです。
###jdbc.resultsettable
jdbc.resultsettableはResultSetの中身を確認しやすい形式にフォーマットして出力するためのロガーです。
取得結果が、想定と異なった時の解析に有効なログですが、出力されるログの量が多いです。
最後まで読んでいただきありがとうございました。
全ての項目を出力してしまうと、ログの量が途方もなくなってしまうので、それぞれの項目の内容を把握して何が必要か取り捨て選択していく必要がありますね・・・
それではみなさん、こんにちはこんばんはさようなら!