經過Arthas來動態打印日誌

需求
線上一個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

相關文章
相關標籤/搜索