java - for - ¿Cómo registrar las declaraciones SQL en Spring Boot?
swagger for spring boot (12)
Esto funciona para mí (YAML):
spring:
jpa:
properties:
hibernate:
show_sql: true
format_sql: true
logging:
level:
org:
hibernate:
type: trace
Quiero registrar declaraciones SQL en un archivo.
Tengo las siguientes propiedades en
application.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
Cuando ejecuto mi aplicación
cmd>mvn spring-boot:run
Puedo ver las instrucciones sql en la consola pero no aparecen en un archivo app.log. El archivo contiene solo registros básicos de spring.
¿Qué debo hacer para ver las instrucciones sql en el archivo de registro?
Esto también funciona para stdout:
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
spring.jpa.properties.hibernate.format_sql=true
Para registrar valores:
spring.jpa.properties.hibernate.type=trace
Simplemente agregue esto a
application.properties
.
La respuesta aceptada traducida a YAML funciona para mí
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql=TRACE
Para el controlador del servidor MS-SQL (controlador JDBC de Microsoft SQL Server).
intente usar:
logging.level.com.microsoft.sqlserver.jdbc=debug
en su archivo application.properties.
Mi preferencia personal es establecer:
logging.level.com.microsoft.sqlserver.jdbc=info
logging.level.com.microsoft.sqlserver.jdbc.internals=debug
Puede consultar estos enlaces como referencia:
Podemos usar cualquiera de estos en el archivo application.properties :
logging.level.org.hibernate.SQL=debug
example :
2018-11-23 12:28:02.990 DEBUG 12972 --- [nio-8086-exec-2] org.hibernate.SQL : select country0_.id as id1_0_, country0_.name as name2_0_ from country country0_
o
logging:
level:
org:
hibernate:
SQL:
TRACE
type:
descriptor:
sql:
BasicBinder:
TRACE
Poner
spring.jpa.properties.hibernate.show_sql=true
en application.properties no siempre ayudó.
Puede intentar agregar
properties.put("hibernate.show_sql", "true");
a las propiedades de la configuración de la base de datos.
public class DbConfig { @Primary @Bean(name = "entityManagerFactory") public LocalContainerEntityManagerFactoryBean entityManagerFactory( EntityManagerFactoryBuilder builder, @Qualifier("dataSource") DataSource dataSource ) { Map<String, Object> properties = new HashMap(); properties.put("hibernate.hbm2ddl.auto", "validate"); properties.put("hibernate.show_sql", "true"); return builder .dataSource(dataSource) .packages("com.test.dbsource.domain") .persistenceUnit("dbsource").properties(properties) .build(); }
Por favor use:
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type=TRACE
spring.jpa.show-sql=true
Según la documentation es:
spring.jpa.show-sql=true # Enable logging of SQL statements.
Si desea ver los parámetros reales utilizados para consultar, puede usar
2018-08-07 14:14:36.079 DEBUG 44804 --- [ main] org.hibernate.SQL : select employee0_.id as id1_0_, employee0_.department as departme2_0_, employee0_.joining_date as joining_3_0_, employee0_.name as name4_0_ from employee employee0_ where employee0_.joining_date=?
2018-08-07 14:14:36.079 TRACE 44804 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [TIMESTAMP] - [Tue Aug 07 00:00:00 SGT 2018]
Luego observe que el valor real del parámetro se muestra como
binding parameter......
spring.jpa.show-sql=true
example :
//Hibernate: select country0_.id as id1_0_, country0_.name as name2_0_ from country country0_
Si tiene problemas con esta configuración y parece funcionar a veces y no en otras ocasiones, considere si los momentos en que no funciona son durante las pruebas unitarias.
Muchas personas declaran propiedades de tiempo de prueba personalizadas a través de la anotación
@TestPropertySources
declarada en algún lugar de la jerarquía de herencia de prueba.
Esto anulará lo que haya puesto en su
application.properties
u otras configuraciones de propiedades de producción para que esos valores que está configurando se ignoren efectivamente en el momento del examen.
intente usar esto en su archivo de propiedades:
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
si tiene un logback-spring.xml o algo así, agregue el siguiente código
<logger name="org.hibernate.SQL" level="trace" additivity="false">
<appender-ref ref="file" />
</logger>
funciona para mi.
Para obtener variables de enlace también:
<logger name="org.hibernate.type.descriptor.sql" level="trace">
<appender-ref ref="file" />
</logger>