需求
線上一個Spring boot應用 經過MyBatis來操做數據庫 定位一個線上問題 想動態打印sql日誌html
解決
經過Arthas工具來實現上述的需求java
$ ognl '@org.slf4j.LoggerFactory@getLogger("com.foo.cpts.mapper")' @Logger[ serialVersionUID=@Long[5454405123156820674], FQCN=@String[ch.qos.logback.classic.Logger], name=@String[com.foo.cpts.mapper], level=null, effectiveLevelInt=@Integer[20000], parent=@Logger[Logger[com.foo.cpts]], childrenList=@CopyOnWriteArrayList[isEmpty=false;size=2], aai=null, additive=@Boolean[true], loggerContext=@LoggerContext[ch.qos.logback.classic.LoggerContext[default]], ]
剛開始Mapper包對應的日誌級別是null 將其改爲DEBUGgit
$ ognl '@org.slf4j.LoggerFactory@getLogger("com.foo.cpts.mapper").setLevel(@ch.qos.logback.classic.Level@DEBUG)' null $ ognl '@org.slf4j.LoggerFactory@getLogger("com.foo.cpts.mapper")' @Logger[ serialVersionUID=@Long[5454405123156820674], FQCN=@String[ch.qos.logback.classic.Logger], name=@String[com.foo.cpts.mapper], level=@Level[DEBUG], effectiveLevelInt=@Integer[10000], parent=@Logger[Logger[com.foo.cpts]], childrenList=@CopyOnWriteArrayList[isEmpty=false;size=2], aai=null, additive=@Boolean[true], loggerContext=@LoggerContext[ch.qos.logback.classic.LoggerContext[default]], ]
此時當調用Mapper方法時 能打印出sql日誌了 一樣關閉sql日誌 改爲info便可github
$ ognl '@org.slf4j.LoggerFactory@getLogger("com.foo.cpts.mapper").setLevel(@ch.qos.logback.classic.Level@INFO)' null
補充
由於打印sql日誌對應的配置是sql
logging.level.com.foo.cpts.mapper=DEBUG
剛開始想着經過下面的方式來實現數據庫
ognl '@java.lang.System@setProperty("logging.level.com.foo.cpts.mapper","DEBUG")'
可是該方式並未起做用app