Spring Boot解説第9回(開発環境編:ログの設定について~log4jdbc)

  • 9
    いいね
  • 0
    コメント

こんにちはこんばんは!
株式会社情創 技術開発局
暑くなっても食欲が減らず
焼肉が食べたくて仕方がない@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に下記の記述を追加します。

build.gradle
compile("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16")

application.propertiesの設定

devの場合のみlog4jdbcを使用し、production時は使用しないのが一般的なようです。
(dev、productionについては 過去記事appliction.propertiesについて参照)

appliction.properties
   spring.datasource.url             = jdbc:log4jdbc:postgresql://{DBサーバー}:5432/{DBスキーマー}
   spring.datasource.driverClassName = net.sf.log4jdbc.sql.jdbcapi.DriverSpy

/resources の下にファイル作成

/src/mainの下にあるresourcesファイル直下に
aaaa.png
log4jdbc.log4j2.propertiesと

log4jdbc.log4j2.properties
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

logback-spring.xmlを作成します。

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の中身を確認しやすい形式にフォーマットして出力するためのロガーです。
取得結果が、想定と異なった時の解析に有効なログですが、出力されるログの量が多いです。

最後まで読んでいただきありがとうございました。
全ての項目を出力してしまうと、ログの量が途方もなくなってしまうので、それぞれの項目の内容を把握して何が必要か取り捨て選択していく必要がありますね・・・
それではみなさん、こんにちはこんばんはさようなら!