Springboot日誌相關

吧弊發表於2020-10-28

市場上的日誌框架

日誌門面(日誌抽象層)日誌實現
JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for Java)、jboss-loggingLog4j、JUL(Java.util.logging)、Log4j2、Logback
  • Log4j、Logback 、SLF4j都是出自同一個人的手,Logback時Log4j的升級版
  • 建議使用SLF4j+Logback的組合作為日誌框架
  • Springboot底層使用的是SLF4j+Logback的組合

SLF4j

  • 開發的時候應該呼叫日誌的抽象層(SLF4j),不應該使用日誌的實現層(Logback),當然也可以使用其他實現層,SLF4j與其他的實現層的關係在slf4j的官網(http://slf4j.org/manual.html)上有一張圖
    在這裡插入圖片描述
  • 使用
public class SLF4jTest {
    public static void main(String[] args){
        Logger logger = LoggerFactory.getLogger(SLF4jTest.class);
        logger.info("測試------");
    }
}

同一個系統統一日誌框架

在一個系統中,可以能引入很多的jar包,如:mybatis、Spring等等,但是他們底層使用的日誌框架不一樣,這個要怎麼解決呢?
在sfl4j的官網(http://slf4j.org/legacy.html)上也能找到解決方案:在這裡插入圖片描述
我們只要使用對應的日誌jar包替換掉其他框架的日誌jar包,就可以達到這個效果,打個比方:
如果mybatis中使用的是Commons logging API,我們要替換掉這個jar包,首先就得排除掉這個jar包,然後引入jcl-over-slf4j.jar的包,其實jcl-over-slf4j中會包含Commons logging API中的所有類以及方法,只是實現不一樣

sfl4j Springboot配置

  • logging.level.com.example=info
    com.example包下的,只要是info級別以上的日誌都輸出
  • logging.path=/var/log
    指定日誌輸出在/var/log的目錄下
  • logging.file=D:\my.log
    指定日誌輸出到my.log的日誌檔案下
  • logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
    控制檯輸出的日誌的格式
  • logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
    指定檔案中輸出的日誌的格式

替換日誌框架

先看一張圖(通過pom檔案右鍵 —> Diagrams —> Show Dependencies檢視)
在這裡插入圖片描述
這張圖是我現在的Springboot的依賴圖,然後我要怎麼做呢?
分析:

  • 這裡是用slf4j作為抽象層,logback作為實現層 (可以看前面的圖片確定)
  • 這裡將log4j的api通過log4j-to-slf4j封裝成了slf4j
    如果要將logback替換掉,那就需要先將logback的依賴移除,然後依然使用slf4j作為抽象層的話,就不要移除slf4j,然後引入對應的中間包
    ,這樣即可完成替換

相關文章