親愛なる友人たち、こんにちは!私の名前はアレクセイです。人事プロダクションの開発者です。この記事では、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" を指定することを忘れないでください。それで全部です。プロキシを介して実行したことを忘れないでください。つまり、新しいアノテーションを配置できるメソッドの選択に制限があります。
それで全部です。ホープは役に立ちました!