<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
    主站蜘蛛池模板: 天天影视色香欲综合免费| 国产高潮流白浆喷水免费A片 | 国产成人免费AV在线播放| 免费一级毛片免费播放| 日本亚洲欧美色视频在线播放| 久久久www成人免费毛片| 亚洲三级视频在线观看| 妻子5免费完整高清电视| 亚洲精品一区二区三区四区乱码 | 免费观看日本污污ww网站一区| 亚洲午夜无码毛片av久久京东热| 久久WWW免费人成人片| 亚洲中文字幕无码久久2020| 成人毛片18女人毛片免费视频未 | 老司机午夜精品视频在线观看免费| 国产特级淫片免费看| 男人扒开添女人下部免费视频| 亚洲AV成人潮喷综合网| a级毛片无码免费真人久久| 亚洲综合婷婷久久| 在线看片人成视频免费无遮挡| 黄色一级视频免费| 亚洲日韩av无码| 99在线免费观看视频| 亚洲AV综合色区无码二区偷拍 | 免费AA片少妇人AA片直播| 亚洲男人天堂2018av| 免费一看一级毛片全播放| a色毛片免费视频| 亚洲日本在线免费观看| 日日AV拍夜夜添久久免费| 国产精品福利片免费看 | 亚洲日产乱码一二三区别| 免费一级毛片在播放视频| 91成人免费观看在线观看| 亚洲欧洲日产v特级毛片| 日本一区二区三区日本免费| 成人A片产无码免费视频在线观看| 亚洲国产亚洲片在线观看播放| 日本免费一二区在线电影| 无码专区AAAAAA免费视频|