Eu quero registrar instruções SQL em um arquivo.
Eu tenho as seguintes propriedades emapplication.properties
spring.datasource.url=...
spring.datasource.username=user
spring.datasource.password=1234
spring.datasource.driver-class-name=net.sourceforge.jtds.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
security.ignored=true
security.basic.enabled=false
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=INFO
logging.file=c:/temp/my-log/app.log
Quando executo meu aplicativo
cmd>mvn spring-boot:run
Eu posso ver instruções sql no console, mas elas não aparecem em um arquivo app.log. O arquivo contém apenas logs básicos da primavera.
O que devo fazer para ver as instruções sql no arquivo de log?
logging.level.org.hibernate.type=TRACE
Isso também funciona para o stdout:
Para registrar valores:
Basta adicionar isso a
application.properties
.fonte
spring.jpa.properties.hibernate.type=trace
?
vez dos parâmetros. Essa solução deveria mostrar para mim?Isso funciona para mim (YAML):
fonte
Por favor, use:
fonte
logging.level.org.hibernate.SQL=DEBUG
fez funcionar para mim e estava faltando outras respostas. Obrigado!se você possui um logback-spring.xml ou algo parecido, adicione o seguinte código a ele
funciona para mim.
Para obter variáveis de ligação também:
fonte
<appender-ref ref="FILE" />
Configurações a serem evitadas
Você não deve usar esta configuração:
O problema
show-sql
é que as instruções SQL são impressas no console, portanto não há como filtrá-las, como faria normalmente com uma estrutura de Log.Usando o log do Hibernate
No seu arquivo de configuração de log, se você adicionar o seguinte criador de logs:
Em seguida, o Hibernate imprimirá as instruções SQL quando o JDBC
PreparedStatement
for criado. É por isso que a instrução será registrada usando espaços reservados para parâmetros:Se você deseja registrar os valores dos parâmetros de ligação, adicione também o seguinte criador de logs:
Depois de definir o
BasicBinder
criador de logs, você verá que os valores dos parâmetros de vinculação também são registrados:Usando proxy de fonte de dados
O datasource-proxy permite proxy do JDBC real
DataSource
, conforme ilustrado pelo diagrama a seguir:Você pode definir o
dataSource
bean que será usado pelo Hibernate da seguinte maneira:Observe que
actualDataSource
deve ser oDataSource
definido pelo pool de conexões que você está usando em seu aplicativo.Depois de ativar
datasource-proxy
, a instrução SQl será registrada da seguinte maneira:fonte
Para o driver do servidor MS-SQL (Driver JDBC do Microsoft SQL Server).
tente usar:
no seu arquivo application.properties.
Minha preferência pessoal é definir:
Você pode consultar estes links para referência:
fonte
De acordo com a documentação , é:
fonte
A resposta traduzida aceita para o YAML funciona para mim
fonte
logging.level.org.hibernate.SQL: TRACE
logging.level.org.hibernate.type.descriptor.sql.BasicBinder: TRACE
Podemos usar qualquer um deles no arquivo application.properties :
ou
fonte
Se você deseja visualizar os parâmetros reais usados para consultar, pode usar
Observe que o valor real do parâmetro é mostrado como
binding parameter......
fonte
Efetue login na saída padrão
adicionar à
application.properties
Essa é a maneira mais simples de imprimir as consultas SQL, embora não registre os parâmetros das instruções preparadas. E isso não é recomendado, pois não é como a estrutura de log otimizada.
Usando a estrutura de log
adicionar à
application.properties
Ao especificar as propriedades acima, as entradas dos logs serão enviadas para o aplicativo de log configurado, como log-back ou log4j.
fonte
Se você está tendo problemas com essa configuração e ela parece funcionar algumas vezes e não outras - considere se os horários em que não funciona são durante testes de unidade.
Muitas pessoas declaram propriedades personalizadas de tempo de teste por meio da
@TestPropertySources
anotação declarada em algum lugar da hierarquia de herança de teste. Isso substituirá o que você colocar nas suasapplication.properties
ou em outras configurações de propriedades de produção, para que esses valores sejam efetivamente ignorados no momento do teste.fonte
Colocando
spring.jpa.properties.hibernate.show_sql=true
application.properties nem sempre ajudou.Você pode tentar adicionar
properties.put("hibernate.show_sql", "true");
às propriedades da configuração do banco de dados.fonte
Você só precisa definir
fonte