<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    xylz,imxylz

    關注后端架構、中間件、分布式和并發編程

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      111 隨筆 :: 10 文章 :: 2680 評論 :: 0 Trackbacks

    最近的項目使用的是舊的ibatis2.x版本,有時候為了方便調試,想輸出SQL執行的語句和參數。我記得應該有某些logger的日志級別修改為DEBUG就可以看到。當然為了方便可以直接在log4j(如果使用log4j的話)的root日志級別修改為DEBUG,并且輸出appender的接受級別修改為DEBUG就可以了。這樣是可以看到日志信息(SQL/參數)等,但是同時也輸出了過多的其它logger信息,顯然在一個稍微大一點的系統里面debug的信息應該都是非常多的,不說別的,光是spring的日志就夠好多頁了。

    為了解決過多的日志,翻出ibatis源碼,看了下。ibatis的執行流程大致是這樣的。

    ibatis-log

    執行步驟如下:

    1. 通過SqlMapClient執行query/execute操作;
    2. 打開一個SqlMapSession會話(openSession());
    3. 設置數據源(DataSource)或者外部給的java.sql.Connection;
    4. 通過java.sql.Connection和外部給的Transaction(如果有的話)構造事務;
    5. 如果java.sql.Connection的日志級別為DEBUG,構造一個帶日志記錄的ConnectionLogProxy(是java.sql.Connection的一個Proxy);
    6. 在ConnectionLogProxy中構造一個帶日志記錄的PreparedStatementLogProxy(是java.sql.PreparedStatement的一個Proxy);
    7. 執行java.sql.Connection中的操作(如果是ConnectionLogProxy就記錄連接日志);
    8. 執行java.sql.PreparedStatement操作(如果是PreparedStatementLogProxy就記錄操作記錄,包括SQL信息)。

    我們看三段代碼:

     

     

     

    第一段代碼可以看到,要想記錄日志的前提是java.sql.Connection的logger的級別是DEBUG或者更低。

    第二段代碼可以看到,要想記錄PreparedStatement的日志,那么比如滿足上述第一段代碼的條件。這里會記錄連接Connection打開的相關信息,比如是否是新開的Connection,這可以從id中分析出。ConnectionLogProxy是java.sql.Connection的一個Proxy實現。

    第三段代碼可以看到,記錄PreparedStatement的日志(SQL/參數)需要java.sql.PreparedStatement的logger的級別是DEBUG或者更低。這里會記錄執行的SQL、參數、參數類型等。PreparedStatementLogProxy是java.sql.PreparedStatement的一個Proxy實現。

    因此要顯示執行的SQL、參數、參數類型以及連接信息等需要配置兩個日志級別為DEBUG或者更低。

    對于log4j來說增加以下兩項就可以了(如果是properties文件的話,xml修改對應規則):

    log4j.logger.java.sql.Connection=DEBUG
    log4j.logger.java.sql.PreparedStatement=DEBUG

     

    上面第二段代碼中如果看的夠仔細的話可以發現有一個ResultSetLogProxy的代理,配置這個相關的日志級別后可以輸出執行結果信息。有興趣的可以看看吧。



    ©2009-2014 IMXYLZ |求賢若渴
    posted on 2010-12-05 15:17 imxylz 閱讀(3530) 評論(3)  編輯  收藏 所屬分類: J2EE

    評論

    # re: Ibatis 2.x日志記錄(SQL調試)分析 2010-12-09 09:52 mashiguang
    第2,3張圖片重復了。  回復  更多評論
      

    # re: Ibatis 2.x日志記錄(SQL調試)分析 2010-12-19 10:07 xylz
    @mashiguang
    多謝,已經修復過來了  回復  更多評論
      

    # re: Ibatis 2.x日志記錄(SQL調試)分析 2014-10-23 21:16 y+
    請問樓主LOG4J是什么版本?  回復  更多評論
      


    ©2009-2014 IMXYLZ
    主站蜘蛛池模板: 四虎影视在线永久免费看黄| 我的小后妈韩剧在线看免费高清版 | 色吊丝永久在线观看最新免费| 亚洲精品午夜久久久伊人| 日本免费一区二区久久人人澡| 久久99亚洲综合精品首页| 一级毛片成人免费看a| 亚洲美女在线国产| 在线观看亚洲专区| 免费少妇a级毛片| 特级毛片免费播放| 国内精品久久久久久久亚洲 | 你是我的城池营垒免费看| 国产亚洲视频在线播放| 中文字幕免费在线观看动作大片| 国内精品久久久久久久亚洲| 国产午夜精品理论片免费观看 | 你懂得的在线观看免费视频| 亚洲AV无码一区东京热| 亚洲免费视频网站| 亚洲宅男精品一区在线观看| 午夜高清免费在线观看| 一级人做人爰a全过程免费视频| 亚洲色婷婷六月亚洲婷婷6月| 久久精品无码专区免费东京热| 亚洲不卡视频在线观看| 免费观看美女裸体网站| 一个人看的在线免费视频| 久久久久亚洲精品成人网小说| 香蕉97超级碰碰碰免费公| 大桥未久亚洲无av码在线| 亚洲精品国产精品乱码不99 | 日本大片在线看黄a∨免费| 一级A毛片免费观看久久精品| 国产成人A人亚洲精品无码| 丁香花免费高清视频完整版| 精品成人一区二区三区免费视频 | 亚洲区日韩精品中文字幕| 亚洲精品亚洲人成在线观看| 国产精品视频免费| 九九免费精品视频在这里|