1. 程式人生 > >MyBatis3 用log4j在控制檯輸出 SQL

MyBatis3 用log4j在控制檯輸出 SQL

為什麼要在控制檯輸出 SQL 呢?

當然是為了開發除錯的時候方便了。

如果一個 資料庫相關的操作出現了問題,我們可以根據輸出的SQL語句快速排查問題。

輸出的資訊:

[org.mybatis.spring.SqlSessionUtils]-Creating a new SqlSession
[org.mybatis.spring.SqlSessionUtils]-SqlSession [[email protected]] was not registered for synchronization because synchronization is not active
[org.springframework.jdbc.datasource.DataSourceUtils]-Fetching JDBC Connection from DataSource
[org.mybatis.spring.transaction.SpringManagedTransaction]-JDBC Connection [jdbc:mysql://rds.aliyuncs.com:3306/yyyy?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull, 
[email protected]
, MySQL Connector Java] will not be managed by Spring [Datenumber.pageSelect]-==> Preparing: SELECT x.Id, DATE_FORMAT(x.`Date`, '%Y%m%d') `datestr`, x.befor_num, x.after_num, x.physician_id, y.department_id, y.clinic_id, y.true_name, y.avatar, y.title, y.telephone FROM datenumber x right join physician y on x.physician_id=y.id AND ( x.`Date` >= ? AND x.`Date` <= ? ) Where 1=1 AND y.clinic_id = ? ORDER BY x.Date ASC [Datenumber.pageSelect]-==> Parameters: 2017-3-28(String), 2017-4-4(String), 1(Long) [Datenumber.pageSelect]-<== Total: 19
輸出的內容比較可怕,資料庫連線字元,使用者名稱密碼都輸出來了,一定要小心。

不過有一點不好的是SQL語句和引數是分開輸出的,想複製到查詢工具中除錯的話還得自己填寫引數,比較麻煩。

我的專案環境

Spring 4.0.2 + Spring MVC 4.0.2 + MyBatis 3.2.6

方法一:使用標準日誌輸出

此方法比較簡單,只需要配置 MyBatis 的配置檔案 Configuration 中有相關屬性即可,不用再放一個 log4j.properties 檔案。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>
關鍵語句:
<setting name="logImpl" value="STDOUT_LOGGING"/>
指定 MyBatis 應該使用哪個日誌記錄實現。如果此設定不存在,則會自動發現日誌記錄實現。

方法二:使用log4j日誌輸出

1、spring-mybatis.xml 檔案不需要修改;

2、在mybatis.xml中,指定使用log4j為日誌實現,這個我實際測試也不需要。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
</configuration>
<!-- 實際測試這個檔案有沒有都可以 -->
這裡的value值可以是SLF4J、Apache Commons Logging、Log4J2、Log4J、JDK logging(除Log4J2、Log4J外,其他未驗證),並會按順序查詢
3、在web.xml中也需要配置
<listener>
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
 </listener>
或者用下面的(未測試)
<listener>
        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
    </listener>
4、最後配置log4j.properties
### Log4j配置 ###
### 與Spring結合需要在web.xml中指定此檔案位置,並新增監聽器 ###
#定義log4j的輸出級別和輸出目的地(目的地可以自定義名稱,和後面的對應)
#[ level ] , appenderName1 , appenderName2
log4j.rootLogger=DEBUG,console,file

#-----------------------------------#
#1 定義日誌輸出目的地為控制檯
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
####可以靈活地指定日誌輸出格式,下面一行是指定具體的格式 ###
#%c: 輸出日誌資訊所屬的類目,通常就是所在類的全名
#%m: 輸出程式碼中指定的訊息,產生的日誌具體資訊 
#%n: 輸出一個回車換行符,Windows平臺為"/r/n",Unix平臺為"/n"輸出日誌資訊換行
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

#-----------------------------------#
#2 檔案大小到達指定尺寸的時候產生一個新的檔案 
log4j.appender.file = org.apache.log4j.RollingFileAppender
#日誌檔案輸出目錄
log4j.appender.file.File=log/tibet.log
#定義檔案最大大小
log4j.appender.file.MaxFileSize=10mb
###輸出日誌資訊###
#最低級別
log4j.appender.file.Threshold=ERROR
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n

#-----------------------------------#
#3 druid
log4j.logger.druid.sql=INFO
log4j.logger.druid.sql.DataSource=info
log4j.logger.druid.sql.Connection=info
log4j.logger.druid.sql.Statement=info
log4j.logger.druid.sql.ResultSet=info
 
#4 mybatis 顯示SQL語句部分
log4j.logger.org.mybatis=DEBUG
#log4j.logger.cn.tibet.cas.dao=DEBUG
#log4j.logger.org.mybatis.common.jdbc.SimpleDataSource=DEBUG
#log4j.logger.org.mybatis.common.jdbc.ScriptRunner=DEBUG
#log4j.logger.org.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
#log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

兩種方式比較

1、使用標準日誌輸出配置簡單,使用log4j日誌輸出配置相對複雜;

2、log4j功能強大,控制粒度比較細;

當在配置檔案中指定為“ STDOUT_LOGGING”時,實際使用的是哪一個日誌實現?Apache Commons Logging 還是JDK logging ?

都不是,實際是 System.out.pringln.

2017-09-14更新

有小夥伴反饋按第二種方法配置後不輸出SQL 語句,請注意 log4j.properties 檔案中的:

log4j.appender.console.Threshold=DEBUG
是否與本例一致!

請注意細節,剛開始學習的朋友可以先完全使用本例提供的配置,得到正確的輸出後再做個性定製。
另外,按照我上面的配置會輸出大量 SQL 語句之外的資訊,一位朋友嘗試出只輸出 SQL 語句、引數、結果的配置方法,在此表示感謝並分享給大家:


======================文件資訊========================

署名(BY) :testcs_dn(微wx笑)

文章出處:[無知人生,記錄點滴](http://blog.csdn.NET/testcs_dn)

==============歡迎關注我的個人微信訂閱號(微wx笑)============

相關推薦

MyBatis3 log4j控制檯輸出 SQL

為什麼要在控制檯輸出 SQL 呢?當然是為了開發除錯的時候方便了。如果一個 資料庫相關的操作出現了問題,我們可以根據輸出的SQL語句快速排查問題。輸出的資訊:[org.mybatis.spring.SqlSessionUtils]-Creating a new SqlSess

配置 log4j控制檯輸出 sql 語句

<span style="font-family:SimSun;font-size:18px;">#### direct log messages to stdout ### log4j.

mybatis在控制檯輸出SQL執行語句

log4j啥的輸出語句,mybatis配置一下配置檔案就可以啦。在mybatis-config.xml中新增如下兩行程式碼就可以,網上有的說只新增最後一行,經嘗試不列印。兩行都填加才打印。 <settings>         <setting name=

MyBatis控制檯輸出SQL語句

用過Hibernate的都知道,我們可以設定Showsql屬性來達到在控制檯輸出SQL語句方便我們除錯的目的,當然MyBatis也可以 這是MyBatis官方文件的一條屬性,我們只要在settings裡面設定它為我們使用的日誌應用的名字就好,比如我用了LOG4J,那麼屬

SpringBoot+MyBatis在控制檯輸出sql語句

1.如果使用application.properties 在配置中新增: logging.level.com.looedu.mapper=debug 格式:logging.level.Mapper類的包=debug 2.如果使用application.yml 在

SpringBoot 整合Mybatis時控制檯輸出sql語句

SpringBoot整合Mybatis極大的加快了開發速度。但是時間長了發現一個問題,sql不論執行的錯與對,控制檯都看不到當前執行的sql資訊,多有不便。 在application.yml進行以下配置即可: logging: level: com.sicme

MyBatis之控制檯輸出sql-yellowcong

MyBatis控制檯輸出Sql的方式有兩種,一種是自帶的格式化輸出這種方式對於Mybatis的版本有要求,第二種是,自己手動新增日誌規則的列印方式,這種更加的靈活方便。 第一種方法:通過Mybatis自帶的 Mybatis提供的標準日誌輸出,是在3.

log4j輸出sql

在log4j中,配置 <!-- 在開發和測試環境啟用,輸出sql --> <logger name="com.sf.sgs.smp.dao.mapper" add

mybatis如何在控制檯輸出sql語句

如果專案中沒有設定logback.xml檔案,則直接加入這三個jar包,就可以 如果專案本身已經設定了logback.xml檔案,則在檔案中需要加入 <!-- project default level --> <logger name=

mybatis 結合 logback 在控制檯輸出 sql 語句 (自用)

        由於工作需要,自己希望在控制檯打印出 sql 執行語句(公司 log 日誌沒有)。參考了很多文章。都沒有得到解決的辦法。也浪費了很多的時間。最終經過自己的不懈努力終於找到了解決的辦法。 感謝博主分享  參考網站 而我用到的只有一行    <lo

Mybatislog4j輸出日誌,輸出sql到控制臺

信息 配置 style rac sage pre SQ back rop log4jar包+log4j.properties百度雲下載地址永久有效: https://pan.baidu.com/s/15WZ-lcBPgFa-a6lkTVVvYw 1 導入jar包(直接復制j

log4j不列印sql,不輸出日誌檔案到指定目錄

#log4j.rootLogger=CONSOLE,info,error,DEBUG log4j.rootLogger=infoA,errorA,CONSOLE,DEBUGA //注意這裡不要用INFO,DEBUG等 改個名字 log4j.appender.CONSOLE=org.apach

SSM+log4j框架控制檯列印SQL語句

第一步:在mybatis-config.xml檔案中的<settings></settings>節點中新增:<setting name="logImpl" value="STDOUT_LOGGING" />,如下圖: 第二步:在log4j.prope

log4j 控制檯和檔案輸出亂碼問題解決

一個小問題,卻讓我感覺到,現在真正動腦的人很少。。我來說說吧。 今天遇到一個小問題,log4j輸出到檔案亂碼,控制檯正常。顯然是編碼問題導致。Google一搜,幾乎一水的說: 專案中log4j在英文版linux下輸出中文日誌為亂碼。由於

SSM中配置log4J輸出sql語句

場景 在SSM整合時需要檢視輸出的sql語句以便排查錯誤資訊。 實現 在專案的classpath(src目錄)下或者resource包下(maven專案)新建一個log4j.properties檔案。 # Global logging configuration log4j.root

控制檯輸出執行sql語句

在log4j.properties中新增 log4j.logger.java.sql = DEBUG log4j.logger.java.sql.Connection = DEBUG log4j.logger.java.sql.Statement = DEBUG lo

mybatislog4j列印sql日誌

一、列印sql到控制檯 1、配置log4j.properties log4j.rootLogger=DEBUG, Console log4j.appender.Console=org.apache.log4j.ConsoleAppender  log4j.appender.

Mybtis與Spring結合使用Log4J列印日誌/Sql控制檯

首先說明一下,專案採用SpringMVC+Mybatis的架構,日誌工具還是最常用的log4j2,整合框架之後發現無法列印SQL語句,只有報錯時才會列印。 然後開始看Mybatis的官方文件,關於日誌這一塊是怎麼處理的,下面是官方文件關於日誌的說明: Logging

log4j的使用以及mybatis在控制檯列印sql語句

正確的log4j寫法:#定義LOG輸出級別log4j.rootLogger=DEBUG,Console,File#定義日誌輸出目的地為控制檯log4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.append

Log4j自動生成日誌(多種方式)輸出到檔案、資料庫等

   Log4j是Apache基金會的一個專案,它能為Java開發著提供功能強大使用方便的各種日誌處理.當然它的版本不限於Java,還有C/C++等主流語言.我覺得它就象一把非常實用的鋒利小刀,讓我們的寫程式時更加如魚得水.           Log4j輸出的資訊分如下幾類:ALL,DEBUG,INFO,E