mybatislog4j列印sql
A. 怎樣使log4j列印sql語句的時候不列印activity工作流SQL語句
1、log4j配置[html]viewplainlog4j.logger.com.ibatis=DEBUGlog4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUGlog4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUGlog4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUGlog4j.logger.org.mybatis=DEBUGlog4j.logger.java.sql.Connection=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.PreparedStatement=DEBUGlog4j.logger.java.sql.ResultSet=DEBUG2、導入jar[html]viewplainlog4jlog4j1.2.14org.slf4jslf4j-api1.7.7org.slf4jslf4j-log4j121.7.73、沒了,注意一定要導入slf4j的包,否則sql語句列印不出來
B. mybatis怎麼列印出sql,我被誤導了很多年
探討MyBatis列印SQL語句的方法,常見答案建議將java.sql.*,com.ibatis的日誌級別配置為debug以實現實現。但實際操作中發現,列印SQL與上述Java框架並無直接關聯。MyBatis使用的日誌對象是org.apache.ibatis.logging.slf4j.Slf4jImpl(statementLog)。日誌的列印與否取決於statementLog與log4j.xml或log4j.properties中log4j.logger的匹配情況。
詳細分析如下:
1. 核心在於statementLog的調試級別,決定是否列印SQL。
具體實現於org.apache.ibatis.executor.SimpleExecutor,當調用ConnectionLogger對象時,便執行列印日誌的代碼。
關鍵代碼行位於org.apache.ibatis.logging.jdbc.BaseJdbcLogger的ConnectionLogger(BaseJdbcLogger).debug(String, boolean)處,位於第141行。
2. statementLog的注入來源於MappendStatement。
MappendStatement由org.apache.ibatis.session.Configuration注冊。查看MappendStatement的構造過程,LogFactory.getLog(xx)這行代碼是關鍵。
從這段代碼的值來看,是否使用與java.sql、com.ibatis框架無關的日誌框架。
MyBatis支持使用多種日誌框架,包括slf4j或common-logger,其兼容性足夠強大。
在類org.apache.ibatis.logging.LogFactory中,載入類時會執行靜態代碼塊,嘗試各種日誌框架實現。若成功,則實例化logConstructor,確保即使客戶端未包含特定實現,代碼也不會出錯。
總結而言,配置log4j.logger的值以指定的日誌級別,即可實現MyBatis列印SQL語句的目的。例如,配置log4j.logger.com.helijia.search=DEBUG。
C. mybatis怎麼配置log4j列印出sql語句
在程序調試時mybatis並沒有hibernate所提供的showsql功能,只能通過配置log4j日誌輸出級別的方式來列印sql。但網上搜到的答案幾乎都是下面的配置方式:
log4j.rootLogger=info,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
###顯示SQL語句部分
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=
rootLogger的級別是info,防止其他地方輸出debug的調試代碼(rootLogger若設為debug了,mybatis也沒必要再設置了)。但這段代碼根本沒有作用!不知是不是我使用的jar包版本比較新的緣故(3.4.1)。經過一系列的嘗試,終於找到了解決方案,直接修改層的輸出級別即可:
<loggers>
<Logger name="com.github.vita.code." level="trace" />
<root level="info">
<appender-ref ref="Console"/>
</root>
</loggers>123456123456
上面的是log4j 2的XML配置,1中對應的為log4j.logger.com.github.vita.code.=trace。這兒把輸出調成了更低的trace,可以看到更詳細的信息。