답변
환경
datasource {
...
logSql = true
}
DataSource.groovy ( 이 지침에 따라)는 내 환경에서 작동하기에 충분했습니다. FAQ의 일부가 오래된 것 같습니다 (예 : “다 대다 열 거꾸로”질문). 그 동안 변경된 내용 일 수도 있습니다.
답변
다음을 수행하는 것이 더 유용하다는 것을 알았습니다. Hibernate의 로깅을 활성화하여 바인드 변수와 함께 SQL을 기록 할 수 있습니다 (따라서 호출에 전달 된 값을 볼 수 있고 편집기에서 SQL을 쉽게 복제 할 수 있습니다).
에서 Config.groovy
log4j 블록에 다음을 추가하십시오.
log4j = {
// Enable Hibernate SQL logging with param values
trace 'org.hibernate.type'
debug 'org.hibernate.SQL'
//the rest of your logging config
// ...
}
답변
성배 3. *
옵션 # 1은 logback.groovy에 다음을 추가합니다.
logger("org.hibernate.SQL", DEBUG, ["STDOUT"], false)
logger("org.hibernate.type.descriptor.sql.BasicBinder", TRACE, ["STDOUT"], false)
또는
옵션 # 2는 application.yml의 dataSource에 다음을 추가합니다. 그러나이 방법은 매개 변수 값을 기록하지 않습니다.
environments:
local:
dataSource:
logSql: true
formatSql: true
답변
이 시도:
log4j = {
...
debug 'org.hibernate.SQL'
trace 'org.hibernate.type.descriptor.sql.BasicBinder'
}
Hibernate type
패키지에 대한 추적 로깅의 성능 문제를 방지합니다 . 이것은 Hibernate 3.6 이상에서 작동합니다. https://burtbeckwith.com/blog/?p=1604 에서 가져 왔습니다.
답변
솔루션은 프로덕션이 아닌 개발 용입니다.
위의 모든 답변이 작동하며 정확합니다. 그러나 그들은 사람이 읽을 수있는 좋은 방식으로 완전한 쿼리를 표시하지 않습니다. 최종 (?,?없이) 쿼리를 보려면 두 가지 옵션이 있습니다.
A) log4jdbc 또는 p6Spy를 사용하여 jdbc 연결을 프록시하십시오.
B) 데이터베이스 수준에서 살펴보십시오. 예를 들어 mysql로 정말 쉽게 할 수 있습니다.
general_log_file이 어디에 있는지 알아보십시오. 활성화되지 않은 경우 활성 일반 로그입니다.
mysql command line> show variables like "%general_log%";
mysql command line> set global general_log = true;
이제 모든 것이 로그 파일에 기록됩니다. Mac / linux 예제는 쿼리의 멋진 스트림을 보여줍니다.
tail -f path_to_log_file
답변
참조 용으로 만 순수하지만 p6spy를 사용하여 SQL 쿼리를 기록합니다. 작은 중급 jdbc 드라이버입니다. 정확한 쿼리는 서버로 전송되는 것처럼 기록됩니다 (매개 변수 포함).
프로젝트에 포함 :
runtime 'p6spy:p6spy:3.0.0'
데이터 소스 드라이버를 변경하십시오.
driverClassName: com.p6spy.engine.spy.P6SpyDriver
그리고 귀하의 jdbc URL :
url: jdbc:p6spy:mysql://
spy.properties를 사용하여 구성하십시오 (grails-app / conf에서).
driverlist=org.h2.Driver,com.mysql.jdbc.Driver
autoflush=true
appender=com.p6spy.engine.spy.appender.StdoutLogger
databaseDialectDateFormat=yyyy-MM-dd
logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
프로덕션을 위해 이것을 비활성화하는 것을 잊지 마십시오!
답변
다음은 나를 위해 작동합니다.
grails-app / conf / application.yml
# ...
hibernate:
format_sql: true # <<<<<<< ADD THIS <<<<<<<
cache:
queries: false
use_second_level_cache: true
# ...
environments:
development:
dataSource:
logSql: true // <<<<<<< ADD THIS <<<<<<<
dbCreate: create-drop
url: jdbc:h2:mem:...
# ...
grails-app / conf / logback.groovy
// ...
appender('STDOUT', ConsoleAppender) {
encoder(PatternLayoutEncoder) {
pattern = "%level %logger - %msg%n"
}
}
// >>>>>>> ADD IT >>>>>>>
logger 'org.hibernate.type.descriptor.sql.BasicBinder', TRACE, ['STDOUT']
logger 'org.hibernate.SQL', TRACE, ['STDOUT']
// <<<<<<< ADD IT <<<<<<<
root(ERROR, ['STDOUT'])
def targetDir = BuildSettings.TARGET_DIR
// ...