Quiero registrar declaraciones SQL en un archivo.
Tengo las siguientes propiedades enapplication.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?
logging.level.org.hibernate.type=TRACE
Esto también funciona para stdout:
Para registrar valores:
Solo agrega esto a
application.properties
.fuente
spring.jpa.properties.hibernate.type=trace
?
lugar de los parámetros. ¿Se suponía que esa solución me los mostraría?Esto funciona para mí (YAML):
fuente
Por favor use:
fuente
logging.level.org.hibernate.SQL=DEBUG
lo hizo funcionar para mí y me faltaban otras respuestas. ¡Gracias!si tiene un logback-spring.xml o algo así, agregue el siguiente código
funciona para mi.
Para obtener variables de enlace también:
fuente
<appender-ref ref="FILE" />
Configuraciones para evitar
No debe usar esta configuración:
El problema
show-sql
es que las instrucciones SQL se imprimen en la consola, por lo que no hay forma de filtrarlas, como lo haría normalmente con un marco de registro.Usar el registro de Hibernate
En su archivo de configuración de registro, si agrega el siguiente registrador:
Luego, Hibernate imprimirá las declaraciones SQL cuando
PreparedStatement
se cree el JDBC . Es por eso que la declaración se registrará utilizando marcadores de posición de parámetros:Si desea registrar los valores de los parámetros de enlace, simplemente agregue también el siguiente registrador:
Una vez que configure el
BasicBinder
registrador, verá que los valores de los parámetros de enlace también se registran:Usar datasource-proxy
El proxy de origen de datos le permite proxy el JDBC real
DataSource
, como se ilustra en el siguiente diagrama:Puede definir el
dataSource
bean que utilizará Hibernate de la siguiente manera:Tenga en cuenta que
actualDataSource
debe ser elDataSource
definido por el grupo de conexiones que está utilizando en su aplicación.Una vez que habilite
datasource-proxy
, la instrucción SQl se registrará de la siguiente manera:fuente
Para el controlador del servidor MS-SQL (controlador JDBC de Microsoft SQL Server).
intente usar:
en su archivo application.properties.
Mi preferencia personal es establecer:
Puede consultar estos enlaces como referencia:
fuente
Según la documentación es:
fuente
La respuesta aceptada traducida a YAML funciona para mí
fuente
logging.level.org.hibernate.SQL: TRACE
logging.level.org.hibernate.type.descriptor.sql.BasicBinder: TRACE
Podemos usar cualquiera de estos en el archivo application.properties :
o
fuente
Si desea ver los parámetros reales utilizados para consultar, puede usar
Luego observe que el valor del parámetro real se muestra como
binding parameter......
fuente
Inicie sesión en la salida estándar
añadir
application.properties
Esta es la forma más sencilla de imprimir las consultas SQL, aunque no registra los parámetros de las declaraciones preparadas. Y no se recomienda ya que no es como un marco de registro optimizado.
Uso del marco de registro
añadir
application.properties
Al especificar las propiedades anteriores, las entradas de registros se enviarán al agregado de registro configurado, como log-back o log4j.
fuente
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
@TestPropertySources
anotación declarada en algún lugar de la jerarquía de herencia de prueba. Esto anulará lo que haya puesto en suapplication.properties
configuración de propiedades de producción u otra, de modo que los valores que esté configurando se ignoren efectivamente en el momento de la prueba.fuente
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.fuente
Solo necesitas configurar
fuente