日期:2014-05-17  浏览次数:20754 次

Spring2+iBatis怎么同时把执行的SQL语句和session里的信息打印到Log里。
Spring2+iBatis
现在想出log,log里的一行内容想有

1)用户名
2)执行的SQL

其中用户名就是session里用户login时存得信息。


目前看到输出SQL,ibatis和log4j结合配置一下好像可以,但是出来的格式很固定。
其实我就想得到prepareSQL ?被替换后,执行时的完整SQL。这个ibatis可以嘛?
而且希望同时能把用户名一起输出,请问用什么办法?
希望做过的人给个例子 包括java和配置



------解决方案--------------------
用spring+ibatis+log4j,仅靠配置文件是达不到你说的效果的。
如果效果一定是你要求的,有2个思路来做。
(一)
1 配置log4j.property,让ibatis包里面的类的日志级别是DEBUG,这样可以把SQL记录到日志中。
2 用SPRING的AOP,在每次service或者DAO方法执行之前先执行你自己写的代码,把用户名也写到日志中。
3 用专门的代码处理日志文件,因为日志文件中有用户名,也有SQL语句,可以处理出来。
(二)
修改ibatis的核心类,即执行SQL的类,加上日志功能。
------解决方案--------------------
>>>可以输出sql了,但格式固定

log4j不能格式化一下输出的sql吗?
------解决方案--------------------
那这关系到ibatis了,它难道只能输出带?的sql? 实际的sql语句是在ibatis中执行的吧

二楼说的改为Debug可以吗
------解决方案--------------------
不清楚itatis是如何与log4j整合的,但我想既然需要的信息已都存在,可能会有办法在ibatis之外解决。
当然ibatis是开源的,直接修改应该也不会太复杂。
------解决方案--------------------
看看这个可以吗?

打印出Ibatis最终的SQL语句
http://www.blogjava.net/itspy/archive/2007/02/11/99232.html

http://stackoverflow.com/questions/4082834/ibatis-spring-how-to-log-the-sql-that-is-executed