1. 程式人生 > 其它 >11.springboot與日誌

11.springboot與日誌

市場上的日誌框架: JUL,JCL,Jboss-logging,logback,log4j,log4j2,slf4j...
日誌門面(日誌的抽象層:相當於介面) 日誌實現(介面的實現)
JCL(jakarta Commons loggging) slf4j(simple logging facade for java) jboss-logging log4j jul lo4j2 logback
左邊選擇一個抽象層,右邊選擇一個實現! 日誌門面選擇:SLF4J 日誌實現:LogBack   springBoot:底層是spring框架,spring框架預設使用的是JCL springboot選用的是SLF4J和LogBack

2.SLF4J的使用

1.如何在系統中使用SLF4J的日誌框架呢

以後在開發時,日誌記錄方法的呼叫,不應該直接呼叫日誌的實現類,而是應該呼叫日誌抽象層裡面的方法

遺留問題

springboot(預設底層使用的是:slf4j和logback) spring(預設底層使用的是comming-logging) hibernate(預設底層使用的是 jboss-logging) 等等 那如何做到日誌的統一呢??和springboot一樣使用slf4j進行日誌輸出呢! 如何讓系統中所有的日誌都使用slf4j呢 做法: 1.將其他系統中的日誌先排除出去 2.用中間包替換原有的日誌框架 3.我們匯入slf4j的實現 總結: 1》springboot底層也是使用slf4j和logback的方式進行日誌記錄 2》springboot也把其他的日誌都替換成了slf4j 3》中間替換包? 4》如果我們要引入其他框架?一定要把這個框架的預設日誌依賴移除掉,匯入中間轉換包,最終日誌以slf4j和logback的形式進行統一 例如:spring框架用的是commons-logging的日誌框架,springboot底層就是spring,他在匯入spring依賴時:   日誌的使用:
Logger logger = LoggerFactory.getLogger(getClass());--->這裡的LoggerFactoryjar包必須是slf4j的
@Test
public void  test0(){
    /**
     * 日誌級別從低禱告: trace<debug<info<warm<erro
     * 可以調整日誌的輸出級別:日誌就只會在這個級別以後的高級別生效
     */
    logger.trace("這是trace日誌..");
    logger.debug("這時debug日誌...");
    //springboot預設給我們使用的是info(info以及更高級別)級別的,沒有指定級別的就是用springboot預設規定的級別:又稱root級別
    logger.info("這這是info日誌...");
    logger.warn("這是warm日誌..");
    logger.error("這是erro日誌...");
}
輸出:發現其只輸出了info以及更高日誌-->springboot的預設輸出級別!
    2020-09-20 11:35:15.530  INFO 11648 --- [           main] cn.com.wmd.SpringBootTest                : 這這是info日誌...
    2020-09-20 11:35:15.530  WARN 11648 --- [           main] cn.com.wmd.SpringBootTest                : 這是warm日誌..
    2020-09-20 11:35:15.538 ERROR 11648 --- [           main] cn.com.wmd.SpringBootTest                : 這是erro日誌...
    
這個預設的輸出級別在application.properties可做更改:logging.level.包=日誌級別---->意思是在包(cn)下的所有類使用的日誌級別均是trace
    logging.level.cn=trace
    
這時輸出:發現其輸出了全部級別的日誌!!
    2020-09-20 11:40:46.392 TRACE 14656 --- [           main] cn.com.wmd.SpringBootTest                : 這是trace日誌..
    2020-09-20 11:40:46.392 DEBUG 14656 --- [           main] cn.com.wmd.SpringBootTest                : 這時debug日誌...
    2020-09-20 11:40:46.392  INFO 14656 --- [           main] cn.com.wmd.SpringBootTest                : 這這是info日誌...
    2020-09-20 11:40:46.392  WARN 14656 --- [           main] cn.com.wmd.SpringBootTest                : 這是warm日誌..
    2020-09-20 11:40:46.398 ERROR 14656 --- [           main] cn.com.wmd.SpringBootTest                : 這是erro日誌...
logging.path和logging.file的區別
logging.file logging.path 示例 描述
不指定 不指定   只在控制檯輸出
指定檔名 不指定 my.log 輸出日誌到my.log
不指定 指定目錄 /var/log 輸出到指定目錄的spring.log檔案中
使用示例:
在application.properties配置檔案中配置:
    #在當前磁碟的根目錄下常見spring資料夾和裡面的log資料夾;使用spring.log作為預設的配置檔案
    logging.path=/spring/log
    
    #不指定路徑會在當前專案下生成springboot.log日誌
    #可以指定完整的路徑
    logging.file=G:/springboot.log
    
    #在控制檯輸出的日誌格式
    logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
    
    #指定檔案中日誌輸出的格式
    logging.pattern.file=%d{yyyy-MM-dd}===[%thread]===%-5level===%logger{50}===%msg%n
    
日誌的輸出格式:
    %d表示日期時間
    %thread表示執行緒名
    %-5level:級別從左顯示5個字元寬度
    %logger{50} 表示logger名稱做i長50個字元,否則按照句點分割
    %msg:日誌訊息
    %n是換行符

發現控制檯輸出格式:
    2020-09-20 [main] TRACE cn.com.wmd.SpringBootTest - 這是trace日誌..
    2020-09-20 [main] DEBUG cn.com.wmd.SpringBootTest - 這時debug日誌...
    2020-09-20 [main] INFO  cn.com.wmd.SpringBootTest - 這這是info日誌...
    2020-09-20 [main] WARN  cn.com.wmd.SpringBootTest - 這是warm日誌..
    2020-09-20 [main] ERROR cn.com.wmd.SpringBootTest - 這是erro日誌...
檔案輸出格式:
    2020-09-20===[main]===TRACE===cn.com.wmd.SpringBootTest===這是trace日誌..
    2020-09-20===[main]===DEBUG===cn.com.wmd.SpringBootTest===這時debug日誌...
    2020-09-20===[main]===INFO ===cn.com.wmd.SpringBootTest===這這是info日誌...
    2020-09-20===[main]===WARN ===cn.com.wmd.SpringBootTest===這是warm日誌..
    2020-09-20===[main]===ERROR===cn.com.wmd.SpringBootTest===這是erro日誌...
    
2.指定日誌檔案的配置 給類路徑下放上每個日誌框架自己的配置檔案即可;springboot就不會使用自己的預設配置了
日誌框架 配置檔名稱
Logback logback-spring.xml ,logback-spring.groovy, logback.xml, logback.groovy
log4j2 log4j2-spring.xml, log4j.xml
JDK(Java Util Logging) logging.properties
logback.xml:直接被日誌框架識別到了 logback-spring.xml:日誌框架就不會直接載入日誌的配置項,由spring-boot解析日誌配置,可以使用springboot的告警profile共功能
<springProfile name="staging">
    可以指定某段配置只在某個環境下生效
</springProfile>