3.5. ロギング

Hibernate はさまざまなシステムイベントをログに記録するため、 SLF4J (Simple Logging Facade for Java) を使用します。 SLF4J は、 選択したバインディングに応じてログ出力を複数のロギングフレームワーク (NOP、 Simple、 log4j バージョン 1.2、 JDK 1.4 ロギング、 JCL、 logback) に転送することができます。 ロギングを設定するには、 希望のバインディングの jar ファイル (Log4J の場合は slf4j-log4j12.jar) と、 クラスパス上に slf4j-api.jar が必要となります。 詳細は SLF4J の ドキュメント を参照してください。 Log4j を使用するには、 クラスパスに log4j.properties を置く必要もあります。 サンプルのプロパティファイルは、 Hibernate の src/ ディレクトリにあります。
Hibernate のログメッセージを理解できるようにしてください。 Hibernate のログはできる限り詳細で、 読みやすいようになっています。 トラブルシューティングでは必須となります。 重要なログのカテゴリは次の通りです。

表3.9 Hibernate ログカテゴリ

カテゴリ 機能
org.hibernate.SQL 実行したすべての SQL(DDL)ステートメントをロギングします。
org.hibernate.type すべての JDBC パラメータをロギングします。
org.hibernate.tool. hbm2ddl 実行したすべての SQL(DDL)ステートメントをロギングします。
org.hibernate.pretty session に関連するすべてのエンティティ(最大20)のフラッシュ時間をロギングします。
org.hibernate.cache すべてのニ次キャッシュの動作をロギングします。
org.hibernate. transaction トランザクションに関連する動作をロギングします。
org.hibernate.jdbc JDBC リソース取得をロギングします。
org.hibernate.hql. ast.AST HQL と SQL の AST のクエリパースをロギングします。
org.hibernate.secure すべての JAAS 分析をロギングします。
org.hibernate すべてをロギングします。 情報量は多くなりますが、 トラブルシューティングには便利です。
Hibernate でアプリケーションの開発時には、ほとんどの場合、カテゴリ org.hibernate.SQLdebug を有効にします。 debug の代わりにプロパティ hibernate.show_sql を有効にすることもできます。