Log4JDBC es una buena solución que imprime el SQL exacto que va a la base de datos con los parámetros establecidos en lugar de la respuesta más popular aquí que no hace esto. Una de las principales ventajas de esto es que puede copiar el SQL directamente en el front-end de su base de datos y ejecutarlo tal cual.
Este último también genera una representación tabular de los resultados de la consulta.
Salida de muestra que muestra el SQL generado con parámetros en su lugar junto con la tabla de conjunto de resultados de la consulta:
5. insert into ENQUIRY_APPLICANT_DETAILS (ID, INCLUDED_IN_QUOTE, APPLICANT_ID, TERRITORY_ID, ENQUIRY_ID, ELIGIBLE_FOR_COVER) values (7,1,11,1,2,0)10Oct201316:21:224953[main] INFO jdbc.resultsettable -|---|--------|--------|-----------|----------|---------|-------|10Oct201316:21:224953[main] INFO jdbc.resultsettable -|ID |CREATED |DELETED |CODESET_ID |NAME |POSITION |PREFIX |10Oct201316:21:224953[main] INFO jdbc.resultsettable -|---|--------|--------|-----------|----------|---------|-------|10Oct201316:21:224953[main] INFO jdbc.resultsettable -|2|null|null|1|Country2|1|60|10Oct201316:21:224953[main] INFO jdbc.resultsettable -|---|--------|--------|-----------|----------|---------|-------|
Actualización 2016
Más recientemente, he estado usando log4jdbc-log4j2 ( https://code.google.com/archive/p/log4jdbc-log4j2/ ) con SLF4j y logback. Las dependencias de Maven requeridas para mi configuración son las siguientes:
Mi archivo de configuración logback.xml tiene el siguiente aspecto: genera todas las instrucciones SQL con parámetros más las tablas de conjunto de resultados para todas las consultas.
<?xml version="1.0" encoding="UTF-8"?><configuration><appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern></encoder></appender><loggername="jdbc.audit"level="ERROR"/><loggername="jdbc.connection"level="ERROR"/><loggername="jdbc.sqltiming"level="ERROR"/><loggername="jdbc.resultset"level="ERROR"/><!-- UNCOMMENT THE BELOW TO HIDE THE RESULT SET TABLE OUTPUT --><!--<logger name="jdbc.resultsettable" level="ERROR" /> --><rootlevel="debug"><appender-refref="STDOUT"/></root></configuration>
Finalmente, tuve que crear un archivo llamado log4jdbc.log4j2.properties en la raíz del classpath, por ejemplo, src / test / resources o src / main / resources en un proyecto Mevn. Este archivo tiene una línea que es la siguiente:
10:44:29.400[main] DEBUG jdbc.sqlonly - org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70)5.select memberrole0_.member_id as member_i2_12_0_, memberrole0_.id as id1_12_0_, memberrole0_.id
as id1_12_1_, memberrole0_.member_id as member_i2_12_1_, memberrole0_.role_id as role_id3_12_1_,
role1_.id as id1_17_2_, role1_.name as name2_17_2_ from member_roles memberrole0_ left outer
join roles role1_ on memberrole0_.role_id=role1_.id where memberrole0_.member_id=10410:44:29.402[main] INFO jdbc.resultsettable -|----------|---|---|----------|--------|---|-----||member_id |id |id |member_id |role_id |id |name ||----------|---|---|----------|--------|---|-----||----------|---|---|----------|--------|---|-----|
Hola ... Esto parece genial ... justo lo que me recetó el médico :) ... pero ¿también es compatible con CLOB / BLOB? Además, ¿es posible mostrar solo la consulta y no el conjunto de resultados? - Gracias :)
dev ray
1
¿podría darme un ejemplo de configuración cómo hacerlo?
grep
En realidad, este último genera una representación tabular de los resultados de la consulta ... es decir, uno necesita log4jdbc-remix para esa característica agradable.
meriton
Esta solución fue la mejor para mi situación en la que necesitaba ver los valores de número de fila que Hibernate genera para los conjuntos de resultados de paginación. El registro de seguimiento solo muestra los valores de los parámetros de consulta.
Oliver Hernández el
@ Alan Hay, ¿esto también registra consultas nativas?
La org.hibernate.type.descriptor.sql.BasicBindercategoría no incluye todos los parámetros, por ejemplo, tipos de enumeración. Entonces, si quieres todo, realmente necesitas TRACEpara todo el org.hibernate.typegrupo.
seanf
¡Para mí funciona en Hibernate 4.3! Además, no RASTREARÍA el org.hibernate.type completo, porque eso es demasiada salida. En la mayoría de los casos, esta solución servirá.
cslotty
Tenga en cuenta que org.hibernate.type.descriptor.sql.BasicExtractor registra los conjuntos de resultados. Por lo tanto, tener una entrada de gran tamaño puede incluso bloquear la aplicación al iniciar sesión en la consola en Eclipse, y supongo que tampoco es ideal para iniciar sesión en el archivo. Es por eso que prefiero esta solución, también funciona en Hibernate 3. Para aquellos que estén interesados en los tipos de enumeración, pruebe la clase exacta que los registra cuando org.hibernate.type = TRACE. Luego establezca org.hibernate.type.xyz.TheClassThatLogsEnumParams = TRACE.
La solución es correcta, pero también registra todos los enlaces para los objetos de resultado. Para evitar esto, es posible crear un apéndice separado y habilitar el filtrado, por ejemplo:
<!-- A time/date based rolling appender --><appendername="FILE_HIBERNATE"class="org.jboss.logging.appender.DailyRollingFileAppender"><errorHandlerclass="org.jboss.logging.util.OnlyOnceErrorHandler"/><paramname="File"value="${jboss.server.log.dir}/hiber.log"/><paramname="Append"value="false"/><paramname="Threshold"value="TRACE"/><!-- Rollover at midnight each day --><paramname="DatePattern"value="'.'yyyy-MM-dd"/><layoutclass="org.apache.log4j.PatternLayout"><!-- The default pattern: Date Priority [Category] Message\n --><paramname="ConversionPattern"value="%d %-5p [%c] %m%n"/></layout><filterclass="org.apache.log4j.varia.StringMatchFilter"><paramname="StringToMatch"value="bind"/><paramname="AcceptOnMatch"value="true"/></filter><filterclass="org.apache.log4j.varia.StringMatchFilter"><paramname="StringToMatch"value="select"/><paramname="AcceptOnMatch"value="true"/></filter><filterclass="org.apache.log4j.varia.DenyAllFilter"/></appender><categoryname="org.hibernate.type"><priorityvalue="TRACE"/></category><loggername="org.hibernate.type"><levelvalue="TRACE"/><appender-refref="FILE_HIBERNATE"/></logger><loggername="org.hibernate.SQL"><levelvalue="TRACE"/><appender-refref="FILE_HIBERNATE"/></logger>
**If you want hibernate to print generated sql queries with real values instead of question marks.****add following entry in hibernate.cfg.xml/hibernate.properties:**
show_sql=true
format_sql=true
use_sql_comments=true**Andadd following entry in log4j.properties :**
log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout
Hey single31 líneas anteriores tiene que agregarse en su archivo de configuración de hibernación y definitivamente funcionará Siempre publico cosas que he hecho prácticamente.
Vijay Bhatt
3
Esta respuesta es una pequeña variación para la pregunta. A veces, solo necesitamos el sql solo para fines de depuración en tiempo de ejecución. En ese caso, hay una manera más fácil, mediante la depuración en los editores.
Ponga un punto de interrupción en org.hibernate.loader.Loader.loadEntityBatch (o navegue en la pila hasta allí);
Cuando se suspende la ejecución, mire el valor de la variable this.sql;
Esto es para hibernar 3. No estoy seguro de que esto funcione en otras versiones.
El controlador mysql jdbc ya ha proporcionado un conveniente para cumplir con este requisito, al menos debe tener la versión jar> = mysql-connect-jar-5.1.6.jar
Paso 1: [configure su jdbc.url para agregar un registrador y un registro personalizado]
ahora, está usando el registro slf4j, si su registro predeterminado es log4j, debe agregar las dependencias slf4j-api, slf4j-log4j12 para usar el registro slf4j
Paso 2: [escribe tu registro personalizado]
package com.xxx;import java.sql.SQLException;import java.util.Properties;import com.mysql.jdbc.Connection;import com.mysql.jdbc.log.Log;publicclassCustomLoggingProfilerEventHandlerimplementsProfilerEventHandler{privateLog log;publicLoggingProfilerEventHandler(){}publicvoid consumeEvent(ProfilerEvent evt){/**
* you can only print the sql as this.log.logInfo(evt.getMessage())
* you can adjust your sql print log level with: DEBUG,INFO
* you can also handle the message to meet your requirement
*/this.log.logInfo(evt);}publicvoid destroy(){this.log =null;}publicvoid init(Connection conn,Properties props)throwsSQLException{this.log = conn.getLog();}}
Oye, esto es bueno. Pero creo que aquí las consultas se imprimen con el? seguido con los valores de los parámetros. Como tengo infinitas consultas, necesito algo que pueda copiar y pegar en el editor de SQL y se ejecutarán. ¿Hay alguna manera de hacerlo con este enfoque? No estoy tan interesado en ir a bibliotecas de terceros. Gracias :)
dev ray
Gracias. Esperaba no tener que usar soluciones de terceros e hibernar directamente, pero supongo que no tengo otra opción.
dev ray
2
El registro funciona pero no exactamente lo que deseaba o quería hace algún tiempo, pero P6Spy funciona perfectamente ,
Extraiga el p6spy-install.jararchivo, busque p6spy.jaryspy.properties
Agregar dependencia de biblioteca
Agregue p6spy.jara su biblioteca de proyectos la dependencia
Modificar el archivo de propiedades P6Spy
Modifique el archivo de configuración de su base de datos. Debe reemplazar su controlador JDBC existente con el controlador P6Spy JDBC:com.p6spy.engine.spy.P6SpyDriver
El original es el controlador MySQL JDBC - com.mysql.jdbc.Driver
Modificar el archivo de propiedades P6Spy
Modificar el archivo de propiedades P6Spy -spy.properties
Reemplace el real drivercon su controlador JDBC MySQL existente
realdriver=com.mysql.jdbc.Driver#specifies another driver to use
realdriver2=#specifies a third driver to use
realdriver3=
Cambie la ubicación del archivo de registro Cambie la ubicación del archivo de registro en la propiedad del archivo de registro, todas las instrucciones SQL iniciarán sesión en este archivo.
Ventanas
logfile = c:/spy.log
*nada
logfile =/srv/log/spy.log
Copiar “spy.properties”al proyecto classpath
Copie “spy.properties”a la carpeta raíz de su proyecto, asegúrese de que su proyecto pueda localizar "spy.properties", de lo contrario, solicitará “spy.properties”una excepción de archivo no encontrado.
Este fue el camino más fácil para mí en mi aplicación Spring Boot, donde estaba tratando de registrar el SQL generado a partir de una prueba unitaria. Agregué una dependencia de prueba a Gradle (testCompile 'p6spy: p6spy: 3.8.5'), ajusté application.yml para establecer spring.datasource.url = jdbc: p6spy: h2: mem: testdb y spring.datasource.driver-class- name = com.p6spy.engine.spy.P6SpyDriver, y luego agregué spy.properties con realdriver = org.h2.Driver y archivo de registro establecido en mi ruta preferida. Fue fácil extraer el SQL completo del archivo de registro resultante. El único inconveniente fue que a H2 no le gustó el formato de marca de tiempo generado.
Descubrí a través de este hilo que el marco jboss-logging utilizado por hibernate necesitaba ser configurado para iniciar sesión a través de slf4j. Agregué el siguiente argumento a los argumentos de VM de la aplicación:
2013-10-3114:56:19,029 DEBUG [net.sf.hibernate.hql.QueryTranslator] HQL:select noti.id, noti.idmicrosite, noti.fcaducidad, noti.fpublicacion, noti.tipo, noti.imagen, noti.visible, trad.titulo, trad.subtitulo, trad.laurl, trad.urlnom, trad.fuente, trad.texto from org.ibit.rol.sac.micromodel.Noticia noti join noti.traducciones trad where index(trad)='ca'and noti.visible='S'and noti.idmicrosite=985and noti.tipo=34462013-10-3114:56:19,029 DEBUG [net.sf.hibernate.hql.QueryTranslator] SQL:select noticia0_.NOT_CODI as x0_0_, noticia0_.NOT_MICCOD as x1_0_, noticia0_.NOT_CADUCA as x2_0_, noticia0_.NOT_PUBLIC as x3_0_, noticia0_.NOT_TIPO as x4_0_, noticia0_.NOT_IMAGEN as x5_0_, noticia0_.NOT_VISIB as x6_0_, traduccion1_.NID_TITULO as x7_0_, traduccion1_.NID_SUBTIT as x8_0_, traduccion1_.NID_URL as x9_0_, traduccion1_.NID_URLNOM as x10_0_, traduccion1_.NID_FUENTE as x11_0_, traduccion1_.NID_TEXTO as x12_0_ from GUS_NOTICS noticia0_ inner join GUS_NOTIDI traduccion1_ on noticia0_.NOT_CODI=traduccion1_.NID_NOTCOD where(traduccion1_.NID_CODIDI='ca')and(noticia0_.NOT_VISIB='S')and(noticia0_.NOT_MICCOD=985)and(noticia0_.NOT_TIPO=3446)
Oye ... no puedo encontrar ningún ejemplo de este enfoque. ¿Podría proporcionar alguna referencia / ejemplos / tutoriales? Y sigue siendo lo mismo con las últimas versiones o hibernate / log4j o se ha convertido en algún org.hibernate.QueryTranslator o algo así. Gracias
dev ray
Hola ... probé esto, pero parece que esto no funciona con guardar o actualizar. Supongo que solo funciona para consultas seleccionadas, donde entra en juego la traducción de hql a sql
dev ray
1
El complemento Log4Jdbc sería el mejor para su requerimiento. Muestra siguiente-
1.Complete SQL query being hit to the db
2.Parameter values being passed to the query
3.Execution time taken by each query
Consulte el siguiente enlace para configurar Log4Jdbc-
Ninguna de las respuestas mencionadas anteriormente imprimirá sql con parámetros correctamente o es una molestia. Lo logré usando WireShark , que captura todos los sql / comandos que se envían desde la aplicación a Oracle / Mysql, etc. con las consultas.
Todas las respuestas aquí son útiles, pero si está utilizando un XML de contexto de aplicación Spring para configurar su fábrica de sesiones, establecer la variable de nivel log4j SQL solo lo ayuda a llegar allí, también debe configurar la variable hibernate.show_sql en el contexto de la aplicación para que Hibernate comience a mostrar los valores.
ApplicationContext.xml tiene:
<propertyname="hibernateProperties"><value>
hibernate.jdbc.batch_size=25
... <!-- Other parameter values here -->
hibernate.show_sql=true
</value></property>
Gracias, imprime la consulta, pero no los parámetros que utilizó, ¿hay una manera de imprimir los parámetros también?
Liz Lamperouge
0
Hibernate muestra la consulta y sus valores de parámetros en diferentes líneas.
Si está utilizando application.properties en el arranque de primavera y puede usar el parámetro resaltado a continuación en application.properties.
org.hibernate.SQL mostrará consultas
logging.level.org.hibernate.SQL = DEBUG
org.hibernate.type mostrará todos los valores de los parámetros, que se asignarán con consultas de selección, inserción y actualización. logging.level.org.hibernate.type = TRACE
org.hibernate.type.EnumType mostrará el valor del parámetro de tipo enum
logging.level.org.hibernate.type.EnumType = TRACE
ejemplo ::
2018-06-1411:06:28,217 TRACE [main][EnumType.java :321]Binding[active] to parameter:[1]
sql.BasicBinder mostrará un valor de parámetro de tipo entero, varchar y booleano
Incluso esto no muestra los valores de límite y compensación en las consultas.
T3rm1
0
La solución más simple para mí es implementar un stringReplace regular para reemplazar las entradas de parámetros con valores de parámetros (tratando todos los parámetros como string, por simplicidad):
String debugedSql = sql;//then, for each named parameter
debugedSql = debugedSql.replaceAll(":"+key,"'"+value.toString()+"'");//and finnaly
println(debugedSql);
o algo similar para los parámetros posicionales (?).
Tenga cuidado con los valores nulos y los tipos de valores específicos como la fecha, si desea que se registre un sql listo para la ejecución.
Respuestas:
Debe habilitar el registro para las siguientes categorías:
org.hibernate.SQL
- configurado paradebug
registrar todas las sentencias SQL DML a medida que se ejecutanorg.hibernate.type
- configurado paratrace
registrar todos los parámetros JDBCEntonces una configuración log4j podría verse así:
El primero es equivalente a la propiedad
hibernate.show_sql=true
heredada , el segundo imprime los parámetros vinculados, entre otras cosas.Otra solución (no basada en hibernación) sería utilizar un controlador proxy JDBC como P6Spy .
fuente
org.hibernate.type.descriptor.sql.BasicBinder
logger. Habilitando el inicio de sesiónorg.hibernate.type
org.hibernate.type
yorg.hibernate.loader.hql
no funciona para mí mostrar los parámetrosSolo por conveniencia, este es el mismo ejemplo de configuración para Logback (SLF4J)
El resultado en su sql.log (ejemplo) se ve así:
fuente
Cambiar
hibernate.cfg.xml
a:Incluya las entradas log4j y siguientes en "log4j.properties":
fuente
binding parameter [1] as [VARCHAR] - [1]
.En caso de que se esté usando el arranque de primavera, solo configure esto:
aplication.yml
aplicacion.properties
y nada más.
HTH
fuente
Log4JDBC es una buena solución que imprime el SQL exacto que va a la base de datos con los parámetros establecidos en lugar de la respuesta más popular aquí que no hace esto. Una de las principales ventajas de esto es que puede copiar el SQL directamente en el front-end de su base de datos y ejecutarlo tal cual.
http://log4jdbc.sourceforge.net/
https://code.google.com/p/log4jdbc-remix/
Este último también genera una representación tabular de los resultados de la consulta.
Salida de muestra que muestra el SQL generado con parámetros en su lugar junto con la tabla de conjunto de resultados de la consulta:
Actualización 2016
Más recientemente, he estado usando log4jdbc-log4j2 ( https://code.google.com/archive/p/log4jdbc-log4j2/ ) con SLF4j y logback. Las dependencias de Maven requeridas para mi configuración son las siguientes:
El controlador y las URL de DB se ven así:
Mi archivo de configuración logback.xml tiene el siguiente aspecto: genera todas las instrucciones SQL con parámetros más las tablas de conjunto de resultados para todas las consultas.
Finalmente, tuve que crear un archivo llamado log4jdbc.log4j2.properties en la raíz del classpath, por ejemplo, src / test / resources o src / main / resources en un proyecto Mevn. Este archivo tiene una línea que es la siguiente:
Lo anterior dependerá de su biblioteca de registro. Consulte los documentos en https://code.google.com/archive/p/log4jdbc-log4j2 para obtener más información.
Salida de muestra:
fuente
Puede agregar líneas de categoría a log4j.xml:
y agregue propiedades de hibernación:
fuente
agregue las siguientes propiedades y valores a su configuración log4j o logback:
fuente
org.hibernate.type.descriptor.sql.BasicBinder
categoría no incluye todos los parámetros, por ejemplo, tipos de enumeración. Entonces, si quieres todo, realmente necesitasTRACE
para todo elorg.hibernate.type
grupo.Puede hacerlo utilizando el proxy de origen de datos , como describí en esta publicación .
Suponiendo que su aplicación espera un
dataSource
bean (por ejemplo, vía@Resource
), así es como puede configurardatasource-proxy
:Ahora la salida de Hibernate vs datasource-proxy:
los
datasource-proxy
consultas contienen valores de parámetros e incluso puede agregar interceptores de sentencias JDBC personalizados para que pueda detectar problemas de consulta N + 1 directamente desde sus pruebas de integración .fuente
encienda el
org.hibernate.type
registrador para ver cómo se unen los parámetros reales a los signos de interrogación.fuente
fuente
La solución es correcta, pero también registra todos los enlaces para los objetos de resultado. Para evitar esto, es posible crear un apéndice separado y habilitar el filtrado, por ejemplo:
fuente
fuente
Esta respuesta es una pequeña variación para la pregunta. A veces, solo necesitamos el sql solo para fines de depuración en tiempo de ejecución. En ese caso, hay una manera más fácil, mediante la depuración en los editores.
Esto es para hibernar 3. No estoy seguro de que esto funcione en otras versiones.
fuente
El controlador mysql jdbc ya ha proporcionado un conveniente para cumplir con este requisito, al menos debe tener la versión jar> = mysql-connect-jar-5.1.6.jar
Paso 1: [configure su jdbc.url para agregar un registrador y un registro personalizado]
ahora, está usando el registro slf4j, si su registro predeterminado es log4j, debe agregar las dependencias slf4j-api, slf4j-log4j12 para usar el registro slf4j
Paso 2: [escribe tu registro personalizado]
fuente
Me gusta esto para log4j:
fuente
El registro funciona pero no exactamente lo que deseaba o quería hace algún tiempo, pero P6Spy funciona perfectamente ,
Aquí está el tutorial simple para implementar también el tutorial MKYONG para P6Spy .
para mí funcionó a las mil maravillas.
Obtenga el "p6spy-install.jar"
Extraiga el
p6spy-install.jar
archivo, busquep6spy.jar
yspy.properties
Agregue
p6spy.jar
a su biblioteca de proyectos la dependenciaModifique el archivo de configuración de su base de datos. Debe reemplazar su controlador JDBC existente con el controlador P6Spy JDBC:
com.p6spy.engine.spy.P6SpyDriver
El original es el controlador MySQL JDBC -
com.mysql.jdbc.Driver
Lo cambió al controlador JDBC P6Spy -
com.p6spy.engine.spy.P6SpyDriver
spy.properties
Reemplace el
real driver
con su controlador JDBC MySQL existenteCambie la ubicación del archivo de registro Cambie la ubicación del archivo de registro en la propiedad del archivo de registro, todas las instrucciones SQL iniciarán sesión en este archivo.
Ventanas
*nada
“spy.properties”
al proyecto classpathCopie
“spy.properties”
a la carpeta raíz de su proyecto, asegúrese de que su proyecto pueda localizar "spy.properties", de lo contrario, solicitará“spy.properties”
una excepción de archivo no encontrado.fuente
fuente
Usando Hibernate 4 y slf4j / log4j2, intenté agregar lo siguiente en mi configuración log4j2.xml:
Pero sin éxito.
Descubrí a través de este hilo que el marco jboss-logging utilizado por hibernate necesitaba ser configurado para iniciar sesión a través de slf4j. Agregué el siguiente argumento a los argumentos de VM de la aplicación:
Y funcionó como un encanto.
fuente
Esto es lo que funcionó para mí, establecer debajo de la propiedad en el archivo log4j:
Configuración de propiedades de hibernación:
fuente
para el desarrollo con Wildfly (standalone.xml), agregue esos registradores:
fuente
si está utilizando hibernate 3.2.xx use
en vez de
fuente
Puedes registrar esto:
Ejemplo de salida:
fuente
El complemento Log4Jdbc sería el mejor para su requerimiento. Muestra siguiente-
Consulte el siguiente enlace para configurar Log4Jdbc-
fuente
Usa Wireshark o algo similar:
Ninguna de las respuestas mencionadas anteriormente imprimirá sql con parámetros correctamente o es una molestia. Lo logré usando WireShark , que captura todos los sql / comandos que se envían desde la aplicación a Oracle / Mysql, etc. con las consultas.
fuente
Todas las respuestas aquí son útiles, pero si está utilizando un XML de contexto de aplicación Spring para configurar su fábrica de sesiones, establecer la variable de nivel log4j SQL solo lo ayuda a llegar allí, también debe configurar la variable hibernate.show_sql en el contexto de la aplicación para que Hibernate comience a mostrar los valores.
ApplicationContext.xml tiene:
Y tu archivo log4j necesita
fuente
En Java:
Transforme su consulta en TypedQuery si es un CriteriaQuery (javax.persistence).
Entonces:
query.unwrap (org.hibernate.Query.class) .getQueryString ();
fuente
Hibernate muestra la consulta y sus valores de parámetros en diferentes líneas.
Si está utilizando application.properties en el arranque de primavera y puede usar el parámetro resaltado a continuación en application.properties.
org.hibernate.SQL mostrará consultas
logging.level.org.hibernate.SQL = DEBUG
org.hibernate.type mostrará todos los valores de los parámetros, que se asignarán con consultas de selección, inserción y actualización. logging.level.org.hibernate.type = TRACE
org.hibernate.type.EnumType mostrará el valor del parámetro de tipo enum
logging.level.org.hibernate.type.EnumType = TRACE
ejemplo ::
sql.BasicBinder mostrará un valor de parámetro de tipo entero, varchar y booleano
logging.level.org.hibernate.type.descriptor.sql.BasicBinder = TRACE
ejemplo ::
fuente
La solución más simple para mí es implementar un stringReplace regular para reemplazar las entradas de parámetros con valores de parámetros (tratando todos los parámetros como string, por simplicidad):
o algo similar para los parámetros posicionales (?).
Tenga cuidado con los valores nulos y los tipos de valores específicos como la fecha, si desea que se registre un sql listo para la ejecución.
fuente