如何在Grails中loggingSQL语句

我想要login控制台或文件,Grails所做的所有查询来检查性能。

我configuration了这个没有成功。

任何想法都会有帮助。

设置

datasource { ... logSql = true } 

在DataSource.groovy(按照这些说明)足以让它在我的环境中工作。 似乎常见问题的部分内容已经过时(例如,“多对多列向后”的问题),所以这也可能是同时发生的变化。

我觉得这样做更有用,这是为了让Hibernate的日志logging和绑定variables一起loggingSQL(这样你就可以看到传入你的调用的值,并且很容易地在你的编辑器或其他方面复制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 // ... } 

对于Grails 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中。 但是这种方法不logging参数值

 environments: local: dataSource: logSql: true formatSql: true 

尝试这个:

 log4j = { ... debug 'org.hibernate.SQL' trace 'org.hibernate.type.descriptor.sql.BasicBinder' } 

它避免了Hibernate type包跟踪logging的性能问题。 这适用于Hibernate 3.6及以上版本。 我从https://burtbeckwith.com/blog/?p=1604得到了这个;

解决scheme仅用于开发,而不是生产。

以上所有的答案都是正确的。 但是他们并没有以完美的人类可读的方式显示完整的查询。 如果想查看最后的(没有任何?,?)查询,你有两个select。

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; 

现在一切都logging到你的日志文件。 Mac / linux的例子,以显示您的查询很好的stream。

 tail -f path_to_log_file 

纯仅供参考,但我使用p6spy来loggingSQL查询。 这是一个小的中间jdbc驱动程序。 确切的查询被logging下来,因为它将被发送到服务器(包括参数)。

将其包含在您的项目中:

 runtime 'p6spy:p6spy:3.0.0' 

更改您的数据源驱动程序:

 driverClassName: com.p6spy.engine.spy.P6SpyDriver 

和你的jdbcurl:

 url: jdbc:p6spy:mysql:// 

使用spy.properties(在grails-app / conf中)configuration它。

 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 

不要忘记禁用这个生产!

我知道这个问题已经被回答了很长时间,但是我碰巧看到这个问题,并且无法阻止自己在我们的项目中回答或分享我们的SQL日志实施方法。 希望它有一些帮助。

目前处于开发环境。 我们使用“log4jdbc Driver Spy”来loggingsql。

组态:

在你的BuildConfig.groovy:添加下面的依赖关系:

 dependencies { ..... runtime 'org.lazyluke:log4jdbc-remix:0.2.7' } 

并在你的数据源或其他相关的configuration:[无论你已经定义数据源相关的configuration],添加:

 datasources{ ..... driverClassName: "net.sf.log4jdbc.DriverSpy", url: "jdbc:log4jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = XXXXX.XX>XXX)(PORT = 1521))) (CONNECT_DATA = (SID = XXXX)(SERVER =DEDICATED)))", .... } log4j = { info 'jdbc.sqlonly' //, 'jdbc.resultsettable' } 

从我个人的经验来看,我发现它在debugging时非常有用和有用。 还有更多的信息,你可以在这个网站find。 https://code.google.com/p/log4jdbc-remix/

国王的问候

对于特定的代码块,我们也可以创build一个接受闭包的方法。 例如。

  static def executeBlockAndGenerateSqlLogs(Closure closure) { Logger sqlLogger = Logger.getLogger("org.hibernate.SQL"); Level currentLevel = sqlLogger.level sqlLogger.setLevel(Level.TRACE) def result = closure.call() sqlLogger.setLevel(currentLevel) result } executeBlockAndGenerateSqlLogs{DomainClazz.findByPropertyName("property value")}