<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人影院| 国产 亚洲 中文在线 字幕| 51午夜精品免费视频| 免费三级毛片电影片| 亚洲国产成人久久综合一区77| 亚洲高清在线视频| 亚洲av永久无码精品网站| 性色av极品无码专区亚洲| 99视频精品全部免费观看| 亚洲精品视频免费| 亚洲色大网站WWW永久网站| 黄色片免费在线观看| 免费国产在线观看老王影院 | 亚洲宅男天堂a在线| 精品国产呦系列在线观看免费| 成人毛片免费观看视频大全| 亚洲av永久无码天堂网| 亚洲阿v天堂在线2017免费| 免费在线观影网站| a级亚洲片精品久久久久久久| 亚洲国产精品网站在线播放| 曰批全过程免费视频播放网站| JLZZJLZZ亚洲乱熟无码| 黄网站色成年片大免费高清| 国产香蕉九九久久精品免费| 亚洲精品不卡视频| 午夜影院免费观看| 亚洲中文字幕久久久一区| 日韩精品亚洲aⅴ在线影院| **一级毛片免费完整视| 国产亚洲精彩视频| 亚洲高清视频一视频二视频三| 免费在线看黄网站| 亚洲免费网站观看视频|