默认情况下,使用ibatis是不打印ibatis相关的log的,因为内部的sql执行都是内部调用,在server的控制台是不 会 打印log的。

在log4j的配置文件log4j.properties里加上以下几句话就可以了:





log4j.rootLogger=DEBUG,stdout,logfile





log4j.logger.com.bill99.base=INFO

log4j.logger.com.bill99.ctmp=INFO

log4j.logger.com.bill99.golden.inf.sso=INFO

log4j.logger.com.bill99.mdp=INFO

log4j.logger.com.bill99=INFO





#log4j.additivity.com.bill99=false





log4j.appender.logfile=org.apache.log4j.RollingFileAppender

log4j.appender.logfile.File=e\:\\opt\\log\\app-coe-prm.log

log4j.appender.logfile.MaxFileSize=10MB

# Keep three backup files.

log4j.appender.logfile.MaxBackupIndex=3

# Pattern to output: date priority [category] - message

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] %t [%l]%m%n









log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n





#   SqlMap   logging   configuration... 

log4j.logger.java.sql.Connection=INFO

log4j.logger.java.sql.Statement=INFO

log4j.logger.java.sql.PreparedStatement=INFO

log4j.logger.java.sql.ResultSet=INFO





使用如下配置可以查看sql语句中?代表的实际参数:

### direct log messages to stdout ###  

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender  

    log4j.appender.stdout.Target=System.out  

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  

    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n  

 

    log4j.logger.org.hibernate=debug

    log4j.logger.org.hibernate.hql.ast.AST=debug 



    #下面的两条配置非常重要,设置为trace后,将可以看到打印出sql中 ? 占位符的实际内容

    #this is the most important config for showing parames like ?

    log4j.logger.org.hibernate.SQL=trace 

    log4j.logger.org.hibernate.type=trace

    #above two configs 

    log4j.logger.org.hibernate.tool.hbm2ddl=debug 

    log4j.logger.org.hibernate.hql=debug 

    log4j.logger.org.hibernate.cache=debug





    log4j.logger.org.hibernate.transaction=debug 

    log4j.logger.org.hibernate.jdbc=debug 

    log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

 

    log4j.rootLogger=warn, stdout  

    log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
                                        log4j.appender.stdout=org.apache.log4j.ConsoleAppender  

    log4j.appender.stdout.Target=System.out  

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  

    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n  

 

   log4j.logger.org.hibernate=debug

   log4j.logger.org.hibernate.hql.ast.AST=debug 



  #下面的两条配置非常重要,设置为trace后,将可以看到打印出sql中 ? 占位符的实际内容

  #this is the most important config for showing parames like ?

  log4j.logger.org.hibernate.SQL=trace 

  log4j.logger.org.hibernate.type=trace

  #above two configs 

  log4j.logger.org.hibernate.tool.hbm2ddl=debug 

  log4j.logger.org.hibernate.hql=debug 

  log4j.logger.org.hibernate.cache=debug



  log4j.logger.org.hibernate.transaction=debug 

  log4j.logger.org.hibernate.jdbc=debug 

  log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

 

  log4j.rootLogger=warn, stdout  

  log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE



也可以使用p6spy,它可以拦截所有执行的 SQL 语句,而不管你使用的是什么 ORM 框架。对于 PrepareStatement 那样带参数(?) 的语句,它会帮你代上相应的参数值。 





p6spy 的主页是http://sourceforge.net/projects/p6spy/,它支持当前流行的应用服务器,如 JBoss、Orion、Tomcat、WebLogic、WebSphere 等,将spy.properties和p6spy.jar,拷贝到classes根目录和lib目录就可以了,其实不用太在意 p6spy 的安装说明,关键是要了解了某个应用服务器本身,要搞清楚的一个问题是“谁在加载
p6spy 包,从哪里加载”,那么配置 p6spy 就不成问题了,你甚至可以把 p6spy 用在独立的 Java 应用程序中。 





  p6spy 可以输出日志到文件中、控制台、或者传递给 Log4j,而且还能配搭 SQL Profiler 或 IronTrackSQL 图形化监控 SQL 语句,监测到哪些语句的执行是耗时的,逐个优化。关于与 SQL Profiler 或 IronTrackSQL 的配合使用可参数文件的链接。 





如果在你的应用程序启动后,却在 spy.log 文件中发现了如下的提示信息,那就是驱动程序加载先后的问题了。 





<你的程序的数据库驱动名称> is a real driver in spy.properties, but it has been loaded before p6spy. p6spy will not wrap these connections. Either prevent the driver from loading, or try setting'deregisterdrivers' to true in spy.properties 





请把 spy.properties 配置文件里的 





deregisterdrivers=false 





改为 





deregisterdrivers=true 





,重新运行即可。 





这是因为有些应用系统中会先于 P6Spy 加载了真正的数据库的驱动程序,导致 P6Spy 无法监控到,设置 

deregisterdrivers 



为 true ,是显式地把真正的数据库的驱动程序进行反注册掉,而采用 P6Spy 的驱动程序。 



下表列出了 spy.properties 配置文件中的各配置项的名称、默认值及其意义和相关注意事项: 

配置项名称 默认值 配置项意义及相关注意事项 

module.log com.p6spy.engine.logging. P6LogFactory 用来拦截和记录任务应用程序的 JDBC 语句。若无配置或注释掉则无此功能。 

module.outage com.p6spy.engine.outage. P6OutageFactory 检测和记录执行时间比较长的 SQL 语句。若无配置或注释掉则无此功能。 

realdriver   真正的应用系统使用的数据库驱动程序名称。 

realdriver2   真正的应用系统使用的第二种备用数据库驱动程序名称。 

realdriver3   真正的应用系统使用的第三种备用数据库驱动程序名称。 

deregisterdrivers false 显示地把真正的数据库的驱动程序进行反注册掉。取值 true| false 

executionthreshold   P6Log 模块执行时间设置,整数值 (以毫秒为单位),只有当超过这个时间才进行记录 Log。 

outagedetection false P6Outage 模块是否记录较长时间运行的语句。取值 true| false 

outagedetectioninterval   P6Outage 模块执行时间设置,整数值 (以秒为单位)),只有当超过这个时间才进行记录 Log。 

filter false 是否过滤 Log,取值 true| false 

include   过滤 Log 时所包含的表名列表,以逗号分隔。 

exclude   过滤 Log 时所排除的表名列表,以逗号分隔。 

sqlexpression   过滤 Log 时的 SQL 表达式名称 

autoflush true 是否自动刷新。取值 true| false 

dateformat   设置时间的格式,也就是用 Java 的 SimpleDateFormat 程序。 

includecategories   显示指定过滤 Log 时包含的分类列表,取值为 error,info,batch,debug,statement,commit,rollback,result 的各种组合。 

excludecategories   显示指定过滤 Log 时排队的分类列表,取值同上。 

stringmatcher   使用正则表达式来过滤 Log,取值为 com.p6spy.engine.common.GnuRegexMatcher 和 com.p6spy.engine.common.JakartaRegexMatcher 

stacktrace false 打印堆栈跟踪信息。取值 true| false 

stacktraceclass   如果 stacktrace=true,则可以指定具体的类名来进行过滤。 

reloadproperties false 监测属性配置文件是否进行重新加载。取值 true| false 

reloadpropertiesinterval 60 属性配置文件重新加载的时间间隔,以秒为单位。 

useprefix false 是否加上前缀,设置为 true,会加上 p6spy: 作为前缀。取值 true| false 

appender com.p6spy.engine.logging. appender.FileLogger 指定 Log 的 appender,与 Log4J 有点同义,取值:com.p6spy.engine.logging.appender.Log4jLogger、 com.p6spy.engine.logging.appender.StdoutLogger 和 com.p6spy.engine.logging.appender.FileLogger 

logfile spy.log 指定 Log 的文件名,任何适于操作系统的文件。 

append true 指定是否每次是增加 Log,设置为 false 则每次都会先进行清空。取值 true| false 

log4j.appender.STDOUT org.apache.log4j.ConsoleAppender 当 appender 为 log4j 时采用的配置,配置如同 Log4J 的相关配置。 

log4j.appender.STDOUT.layout org.apache.log4j.PatternLayout 同上 

log4j.appender.STDOUT. layout.ConversionPattern p6spy - %m%n 同上 

log4j.logger.p6spy INFO,STDOUT Log 级别的设置,取值同 Log4J 的配置 

realdatasource   设置数据源 DataSource 的配置名称。 

realdatasourceclass   设置数据源 DataSource 的类的全称。 

realdatasourceproperties   设置数据源 DataSource 的属性,以分号分隔。 

jndicontextfactory   设置 JNDI 数据源的 NamingContextFactory。 

jndicontextproviderurl   设置 JNDI 数据源的提供者的 URL。 

jndicontextcustom   设置 JNDI 数据源的一些定制信息,以分号分隔。

利用log4j打印sql的log日志的更多相关文章

  1. Junit测试打印详细的log日志,可以看到sql

    Junit测试打印详细的log日志,可以看到sql 在log4j.xml的日志配置文件中,把日志级别从info级别调整到debug级别: <?xml version="1.0" ...

  2. mybatis结合log4j打印SQL日志

    mybatis结合log4j打印SQL日志 1.Maven引用jar包 默认的mybatis不能打印出SQL日志,不便于查看调试,须要结合log4jdbc-log4j2就能够完整的输入SQL的调试信息 ...

  3. mybatis和redis整合 log4j打印sql语句

    首先,需要在项目中引进jedis-2.8.1.jar包,在pom.xml里加上 <dependency> <groupId>redis.clients</groupId& ...

  4. mybatis下使用log4j打印sql语句和执行结果

    转载自:https://www.cnblogs.com/jeevan/p/3493972.html 本来以为很简单的问题, 结果自己搞了半天还是不行; 然后google, baidu, 搜出来各种方法 ...

  5. 利用log4j+mongodb实现分布式系统中日志统一管理

    背景     在分布式系统当中,我们有各种各样的WebService,这些服务可能分别部署在不同的服务器上,并且有各自的日志输出.为了方便对这些日志进行统一管理和分析.我们可以将日志统一输出到指定的数 ...

  6. 工控随笔_07_西门子_WinCC利用命令行实现操作log日志

    在WinCC中可以通过报警纪录来实现操作员纪录,这个需要WinCC的消息系统进行组态和配置. 利用消息系统进行实现上诉功能不但复杂而且时间久啦也不方便查询.那么有没有一种简单的方法来 实现操作员纪录呢 ...

  7. jpa hibernate 打印sql,format日志,打印SQL参数,打印什么指令

    环境说明:IntelliJ IDEA 2017.3.4 版本:SpringBoot 2.0.0.RELEASE:hibernate用的是JPA自带. 打印SQL 到控制台: 首先,我使用的是appli ...

  8. 打印并输出 log/日志到文件(C++)

    #include <stdarg.h> #define MAX_LEN 1024 bool debug_mode; // 使用方法同 printf void lprintf(const c ...

  9. web项目log日志查看分析->流程理解

    1.DEBUG [2017-07-10 11:38:41,705][] org.springframework.web.servlet.DispatcherServlet:865 - Dispatch ...

  10. log4j打印错误日志输出 利用sql取出的值放在list集合中,集合中的字段类型为映射类类型

    public ServiceResult<List<KefuDetail>> MaxRespondtime(Date startDate,Date endDate, Strin ...

随机推荐

  1. JuiceFS 在大搜车数据平台的实践

    大搜车已经搭建起比较完整的汽车产业互联网协同生态.在这一生态中,不仅涵盖了大搜车已经数字化的全国 90% 中大型二手车商.9000+ 家 4S 店和 70000+ 家新车二网,还包括大搜车旗下车易拍. ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (193)-- 算法导论14.3 1题

    一.用go语言,写出作用于区间树的结点且在 〇(1) 时间内更新 max 属性的过程 LEFT-ROTATE 的伪代码. 文心一言: 以下是一个简单的LEFT-ROTATE的伪代码,它对一个二叉搜索树 ...

  3. SuperObject 的创建类型重大发现

    原来每当到自己创建数组加对象的时候就很头疼,原来是这样搞的,这次是清晰了 向数组里增加对象就用这个了: MySo.AsArray.Add(SO('{"爱好":["编程&q ...

  4. JS leetcode x 的平方根 题解分析

    壹 ❀ 引 这几天心情复杂,也不知道形容.做道题吧,其实是上周的题,一直没整理,比较巧的是,这也是我同学17年去PPTV面试时遇到的一题,题目来自leetcode69. x 的平方根,题目描述如下: ...

  5. NC20812 绿魔法师

    题目链接 题目 题目描述 "我不知道你在说什么,因为我只是个pupil."--绿魔法师 一个空的可重集合S. n次操作,每次操作给出x,k,p,执行以下操作: 1.在S中加入x. ...

  6. 【Unity3D】分离路面导航

    1 前言 ​ 导航系统中介绍了导航的基本用法,但是不能解决分离路面导航问题.如下图,胶囊体需要导航到立方体位置,但是路面不连续,烘焙(Bake)导航网格后,断开处也没有导航网格,因此,胶囊体导航到分离 ...

  7. StretchDIBits在一些图像尺寸下失败

    StretchDIBits用来打印图像,但是由于某种未知的原因,当图像达到特定尺寸时,它会失败. 图像数据从其他一些图像源以24位BGR格式加载到无符号int数组中.它可以在某些大小下工作,但根本无法 ...

  8. nginx中使用perl脚本来定制一些请求转发等等

    http://t.zoukankan.com/carriezhangyan-p-9359708.html https://blog.csdn.net/weixin_28917223/article/d ...

  9. Android 全面屏体验

    一.概述 Android 应用中经常会有一些要求全屏显隐状态栏导航栏的需求.通过全屏沉浸式的处理可以让应用达到更好的显示效果.在 Android 4.1 之前,只能隐藏状态栏, 在 Android4. ...

  10. 【LeetCode哈希表#4】梦开始的地方:两数之和(map),以及关于容器map的一些代码技巧

    两数之和 力扣题目链接(opens new window) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种 ...