Saudações, queridos amigos! Meu nome é Alexey, sou desenvolvedor de produção de RH. Neste artigo, proponho discutir as formas de registrar o Hebernate.
O Hibernate é uma ótima ferramenta para fazer o trabalho, especialmente quando funciona bem e com rapidez, mas quando surgem problemas, você precisa ver o que está acontecendo nos bastidores. Exemplos de configuração serão fornecidos no Spring.
A primeira e mais fácil maneira
Especifique em application.properties: spring.jpa.show-sql=true
ouspring.jpa.properties.hibernate.show_sql=true).
Essa abordagem permite que você resolva o problema rapidamente e ajude a encontrar bugs localmente. Mas existem duas desvantagens óbvias:
1. A saída sql não passa por nosso logger e não tem um formato conveniente para nós.
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 .
. . :
Na verdade, precisamos filtrar os logs necessários por algum atributo. Decidi fazer isso usando MDC, seu escopo é apenas ThreadLocal, o que nos convém. Vamos fazer um filtro:
Fiz o processador de anotações por meio de um aspecto:
Bem, a configuração usando o exemplo do Logback:
Vamos criar um anexador adicional com um filtro e passar os logs p6spy do nível de informação através dele e não se esqueça de especificar aditividade = "false" para que o anexador raiz não processe o mesmo pacote. Isso é tudo. Não se esqueça que o fizemos através de um proxy, o que significa que temos limitações na escolha dos métodos sobre os quais podemos colocar uma nova anotação.
Isso é tudo. A esperança foi útil!