Closed livem closed 7 years ago
发自网易邮箱大师 在2016年11月17日 13:04,bill Cheng 写道:
项目里面,现在用的是
jfinal-1.9-bin-with-src.jar
我通过这句开启了 showsql 日志:
SqlReporter.setLogger(true);
但是,打印出来的只有 sql 语句,没有相应填进去的参数,不知可否也打印出来?查日志也方便许多
我自己翻了一下代码,看到:
com.jfinal.plugin.activerecord.SqlReporter 的 invoke 方法,应该要把整个 Object[] args 数组打印出来,应该就可以了。
再者,我用的是 com.alibaba.druid 来连接数据库的,druid 应该也可以配置打印 sql 日志。
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.
打印 sql 的参数没那么方便, Object[] args 这个并不是 sql 用到的参数。 想做这个功能倒不难,只是代码不优雅,需要将参数不断传递过来,所以暂不支持,大家可以尝试有没有优雅的方案,找到极简方案可以提反馈给我
Object[] args 这个并不是 sql 用到的参数
原来这样,开启com.alibaba.druid
的日志,应该可以做到。
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter
如果使用 alibaba druid 连接池,则可以配置输出可执行的SQL
但是,不知道怎么在 jfinal JFinalConfig
的代码里面,配置 com.alibaba.druid.filter.logging.Log4jFilter
的属性 statementExecutableSqlLogEnable
为 true
DruidPlugin
这个类可以做么?
必然是可以的,先创建 Log4jFilter ,然后通过 druidPlugin.addFilter(...) 添加进去即可,所有的 filter 都可以这样添加,记得搞定后,回来再分享一下,感谢
原来这样,先谢谢。搞定我再发一篇blog记录一下 :)
发自网易邮箱大师 在2016年11月29日 21:00,James Zhan 写道:
必然是可以的,先创建 Log4jFilter ,然后通过 druidPlugin.addFilter(...) 添加进去即可,所有的 filter 都可以这样添加,记得搞定后,回来再分享一下,感谢
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.
Slf4jLogFilter sql_log_filter = new Slf4jLogFilter();
StatFilter sql_stat_filter = new StatFilter();
sql_log_filter.setConnectionLogEnabled(false);
sql_log_filter.setStatementLogEnabled(false);
sql_log_filter.setStatementExecutableSqlLogEnable(true);
sql_log_filter.setResultSetLogEnabled(false);
// 慢sql记录
sql_stat_filter.setSlowSqlMillis(3 * 1000);
sql_stat_filter.setLogSlowSql(true);
DruidPlugin dbPlugin = new DruidPlugin('url', 'user', 'pass');
dbPlugin
.setFilters("stat")
.addFilter(sql_log_filter)
.addFilter(sql_stat_filter);
如果是使用 alibaba druid
数据库连接池的项目,通过上述代码,
并且 logback
的日志等级要调到 debug
,就可以完整输出 sql
+ sql 参数
的了。
感谢回来分享,这个功能,确实有很多人问起过,有空去 jfinal 社区坐坐哈 http://www.jfinal.com
那么快关单了。。。我还以为看看能不能在 jfinal 里面实现这个功能。。。
@livem jfinal 里面可以实现这个功能,但是代码不优雅,这种功能还是直接用底层的现成的功能最好,毕竟 Druid 天然就是做这个事的,不重复发明轮子
也是
上面关于 druid
的代码,主要是它 wiki 上面没有 slf4j
和 jfinal
的例子,所以花了点时间来调试上面的配置项。
有的项目不能用druid,比如有时用weblogic的jndi数据源,有没有好一些的方案呢,现在只能实现showsql,打印不了参数值
@tda7088 log4jdbc
Slf4jLogFilter sql_log_filter = new Slf4jLogFilter(); StatFilter sql_stat_filter = new StatFilter(); sql_log_filter.setConnectionLogEnabled(false); sql_log_filter.setStatementLogEnabled(false); sql_log_filter.setStatementExecutableSqlLogEnable(true); sql_log_filter.setResultSetLogEnabled(false); // 慢sql记录 sql_stat_filter.setSlowSqlMillis(3 * 1000); sql_stat_filter.setLogSlowSql(true); DruidPlugin dbPlugin = new DruidPlugin('url', 'user', 'pass'); dbPlugin .setFilters("stat") .addFilter(sql_log_filter) .addFilter(sql_stat_filter);
如果是使用
alibaba druid
数据库连接池的项目,通过上述代码, 并且logback
的日志等级要调到debug
,就可以完整输出sql
+sql 参数
的了。
jfinal 3.3需要加一句 ......省略...... dp.setFilters("stat") .addFilter(sql_log_filter) .addFilter(sql_stat_filter); dp.start();//加这一句 ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
项目里面,现在用的是
我通过这句开启了 showsql 日志:
SqlReporter.setLogger(true);
但是,打印出来的只有 sql 语句,没有相应填进去的参数,不知可否也打印出来?查日志也方便许多
我自己翻了一下代码,看到:
com.jfinal.plugin.activerecord.SqlReporter
的invoke
方法,应该要把整个Object[] args
数组打印出来,应该就可以了。再者,我用的是
com.alibaba.druid
来连接数据库的,druid
应该也可以配置打印 sql 日志 + sql参数。