<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
    主站蜘蛛池模板: 国产一精品一av一免费爽爽| 亚洲中文字幕乱码AV波多JI| 午夜免费国产体验区免费的| 午夜私人影院免费体验区| 亚洲国产人成网站在线电影动漫 | 亚洲国产无线乱码在线观看| 日本阿v免费费视频完整版| 日韩精品一区二区亚洲AV观看 | 无码专区永久免费AV网站| 国产裸体美女永久免费无遮挡| 成人亚洲综合天堂| 成人午夜影视全部免费看| 亚洲免费日韩无码系列| 亚洲高清免费视频| 亚洲中文字幕在线第六区| 182tv免费视频在线观看| 久久精品视频亚洲| 妻子5免费完整高清电视| 亚洲AV永久无码天堂影院| 日本成人免费在线| 一级毛片免费全部播放| 亚洲AV无码一区二区二三区软件| 久久久久久免费一区二区三区| 亚洲v高清理论电影| 美女被免费喷白浆视频| 亚洲AV一区二区三区四区| 国产av无码专区亚洲国产精品| 免费国产污网站在线观看| 亚洲成a人片在线观看播放| 免费无码一区二区三区蜜桃大| 日本精品久久久久久久久免费| 国产亚洲人成网站观看| 99久久久国产精品免费无卡顿| 亚洲成av人在线观看网站| heyzo亚洲精品日韩| 亚洲精品视频免费看| 综合一区自拍亚洲综合图区| 国产V亚洲V天堂无码久久久| 动漫黄网站免费永久在线观看| 美女被爆羞羞网站在免费观看| 国产l精品国产亚洲区在线观看|