2025 JFinal4打印SQL以及参数

步骤1-1 代码: (方法名也许不是getDruidPlugin(), idea编辑器的话双击shift搜索DruidPlugin dp大概率也可以搜索到)

DruidPlugin String datasourceNameDruidPlugin dp = DruidPluginPropKit.StrKit.Consts.datasourceNamePropKit.StrKit.Consts.datasourceNamePropKit.StrKit.Consts.datasourceNamePropKit.StrKit.Consts.datasourceNamedp.setMaxPoolPreparedStatementPerConnectionSizeSlf4jLogFilter c = Slf4jLogFilterc.setStatementExecutableSqlLogEnablec.setStatementExecuteQueryAfterLogEnableddp.addFiltercdp

步骤1-2 关键代码解释

关键代码1解释: 
    Slf4jLogFilter日志过滤器继承自抽象类com.alibaba.druid.filter.logging.LogFilter
    抽象类com.alibaba.druid.filter.logging.LogFilter有四个子类: 
        com.alibaba.druid.filter.logging.CommonsLogFilter
        com.alibaba.druid.filter.logging.Log4j2Filter
        com.alibaba.druid.filter.logging.Log4jFilter
        com.alibaba.druid.filter.logging.Slf4jLogFilter
    这四个子类选用哪一个作为日志过滤器主要取决于项目中的日志框架, 也不提我们项目是哪一个日志框架了, 应该都不同(或版本不同)
    (比如: 选用CommonsLogFilter时如果打印的日志还是没有SQL的参数, 那就换下一个试试)
  
关键代码2解释:
    开启可执行SQL的日志, 这是比较关键的
    
关键代码3解释:
    添加这个过滤器后, 打印出的SQL会有3条: SQl模版(参数为?), 可执行SQL(?替换为实际参数), SQL执行结果的SQL(形容比较模糊)
    这三条SQL中第三条是比较冗余的, 也不好看. 前两条是比较有价值的日志
    所以false关闭这个日志

最后:
    添加过滤器


步骤2-1 日志配置

将日志配置文件中日志输出级别修改为DEBUG


最终效果(脱敏)Snipaste_2025-02-11_09-42-33.png


实测本项目可以使用, 如有误导请多担待, 欢迎各位补充!

评论区

iuxuanbor

2025-02-11 11:48

步骤1-1 代码的格式有点问题重发一下
public DruidPlugin getDruidPlugin(String datasourceName) {
DruidPlugin dp = new DruidPlugin(PropKit.get(StrKit.format(Consts.JDBC_URL, datasourceName)),PropKit.get(StrKit.format(Consts.JDBC_USERNAME, datasourceName)), PropKit.get(StrKit.format(Consts.JDBC_PASSWORD, datasourceName)), PropKit.get(StrKit.format(Consts.JDBC_DRIVER,datasourceName)));
dp.setMaxPoolPreparedStatementPerConnectionSize(100);
// 关键代码1
Slf4jLogFilter c = new Slf4jLogFilter();
// 关键代码2
c.setStatementExecutableSqlLogEnable(true);
// 关键代码3
c.setStatementExecuteQueryAfterLogEnabled(false);
// 最后
dp.addFilter(c);
return dp;
}

热门分享

扫码入社