Quiero registrar las sentencias 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 sentencias sql en la consola pero no aparecen en el archivo app.log. El archivo contiene sólo los registros básicos de la primavera.
¿Qué debo hacer para ver las sentencias 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 los valores:
spring.jpa.properties.hibernate.type=trace
Sólo tienes que añadir esto a application.properties
.
Por favor, use:
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type=TRACE
spring.jpa.show-sql=true
si tienes un logback-spring.xml o algo así, añádele el siguiente código
<logger name="org.hibernate.SQL" level="trace" additivity="false">
<appender-ref ref="file" />
</logger>
trabaja para mí.
Para obtener variables de enlace también:
<logger name="org.hibernate.type.descriptor.sql" level="trace">
<appender-ref ref="file" />
</logger>
Para el controlador del servidor MS-SQL (Microsoft SQL Server JDBC Driver).
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
Puedes mirar estos enlaces como referencia:
De acuerdo con la [documentación][1] es así:
spring.jpa.show-sql=true # Enable logging of SQL statements.
[1]: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
Podemos usar cualquiera de estos en el archivo application.properties:
spring.jpa.show-sql=true
example :
//Hibernate: select country0_.id as id1_0_, country0_.name as name2_0_ from country country0_
o
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_
Si desea ver los parámetros reales utilizados para la consulta puede utilizar
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql=TRACE
Entonces note que el valor actual del parámetro se muestra como "parámetro vinculante"...
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]
Añade a "application.properties
### to enable
spring.jpa.show-sql=true
### to make the printing SQL beautify
spring.jpa.properties.hibernate.format_sql=true
Esta es la forma más simple de imprimir las consultas SQL aunque no registra los parámetros de las sentencias preparadas. Y no es recomendable ya que no es un marco de registro optimizado.
Añade a "application.properties
### logs the SQL queries
logging.level.org.hibernate.SQL=DEBUG
### logs the prepared statement parameters
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
### to make the printing SQL beautify
spring.jpa.properties.hibernate.format_sql=true
Al especificar las propiedades anteriores, las entradas de los registros se enviarán al apéndice de registro configurado, como log-back o log4j.
Si tiene problemas con este ajuste y parece funcionar a veces y otras no, considere si las veces en que no funciona son durante las pruebas de la unidad.
Mucha gente declara propiedades personalizadas de tiempo de prueba a través de la anotación @TestPropertySources
declarada en algún lugar de su jerarquía de herencia de pruebas.
Esto anulará cualquier cosa que ponga en su `application.properties
o en otros ajustes de propiedades de producción, de modo que esos valores que're ajuste están siendo efectivamente ignorados en el tiempo de prueba.
Poner spring.jpa.properties.hibernate.show_sql=true
en application.properties no siempre ayudó.
Puede intentar añadir propiedades.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();
}