Hibernate のロギング方法

親愛なる友人たち、こんにちは!私の名前はアレクセイです。人事プロダクションの開発者です。この記事では、Hebernate をログに記録する方法について議論することを提案します。





Hibernate は、特に迅速かつ適切に機能する場合は、仕事を完了するための優れたツールですが、問題が発生した場合は、内部で何が起こっているのかを調べる必要があります。設定例は Spring で提供されます。





最初で最も簡単な方法

application.properties: spring.jpa.show-sql=true



またはで指定spring.jpa.properties.hibernate.show_sql=true).







このアプローチにより、問題を迅速に解決し、ローカルでバグを見つけることができます。しかし、2 つの明らかな欠点があります。





1. SQL 出力はロガーを通過せず、便利な形式ではありません。





2. .





— properties,

logging.level.org.hibernate.SQL=DEBUG







logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE







, . , .





— proxy

log4jdbc p6spy. , log4jdbc .





<groupId>com.integralblue</groupId>







log4jdbc-spring-boot-starter







<groupId>com.github.gavlyukovskiy</groupId>







p6spy-spring-boot-starter







, . : , . p6spy.





- .





decorator.datasource.p6spy.log-filter.pattern=.*insert.*



insert .





. . :





実際、必要なログを何らかの属性でフィルタリングする必要があります。私は MDC を使用してこれを行うことにしました。そのスコープは ThreadLocal だけであり、私たちに適しています。フィルタを作成しましょう:





アスペクトを介して注釈プロセッサを作成しました。





さて、Logbackの例を使用した構成:





フィルターを使用して追加のアペンダーを作成し、それを介して情報レベルの p6spy ログを渡します。ルート アペンダーが同じパッケージを処理しないように、additivity = "false" を指定することを忘れないでください。それで全部です。プロキシを介して実行したことを忘れないでください。つまり、新しいアノテーションを配置できるメソッドの選択に制限があります。





それで全部です。ホープは役に立ちました!








All Articles