<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 閱讀(3531) 評論(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综合色区无码另类小说| 嫖丰满老熟妇AAAA片免费看| 亚洲五月午夜免费在线视频| 黄色三级三级免费看| 久久亚洲AV成人无码国产电影| 亚洲欧美乱色情图片| 亚洲综合av一区二区三区| 亚洲中文精品久久久久久不卡| 国产亚洲sss在线播放| 91在线亚洲综合在线| 亚洲精品亚洲人成在线| 99亚洲男女激情在线观看| 色吊丝免费观看网站| 特级无码毛片免费视频| 无码免费又爽又高潮喷水的视频 | 亚洲乱亚洲乱妇24p| 亚洲av无码片vr一区二区三区| 99亚洲乱人伦aⅴ精品| 日本特黄特色AAA大片免费| xxxx日本在线播放免费不卡| 久草免费福利在线| 久久国产精品国产自线拍免费| 外国成人网在线观看免费视频| 美女内射无套日韩免费播放| 亚洲成人免费网址| 成人免费777777| 波多野结衣中文一区二区免费| 2022中文字字幕久亚洲| 亚洲成AV人片在线观看ww| 亚洲精品不卡视频| 亚洲人成色在线观看| 午夜在线免费视频| 无码囯产精品一区二区免费| 免费无码又黄又爽又刺激| 一本色道久久88亚洲综合| 精品国产亚洲一区二区三区 | 激情综合色五月丁香六月亚洲| 亚洲av中文无码乱人伦在线播放 | 亚洲黄色在线观看视频| 伊人久久五月丁香综合中文亚洲| 免费激情网站国产高清第一页 |