1. 程式人生 > >Spring boot 使用Logback列印日誌

Spring boot 使用Logback列印日誌

Logback是什麼

Logback是由log4j創始人設計的又一個開源日誌元件,它的使用非常簡單靈活,是目前主流的日誌記錄工具。

slf4j log4j logback關係

籠統的講就是slf4j是一系列的日誌介面,而log4j logback是具體實現了的日誌框架。官網文件中有一句話明確描述了三者的關係:slf4j譯為簡單日誌門面,實現了日誌框架一些通用的api,log4j和logback是具體的日誌框架

logback的優勢

log4j和logback都是出自Ceki Gülcü之手,而logback相對於log4j來說更新一點。無論從設計上還是實現上,Logback相對log4j而言有了相對多的改進,但是兩者的用法幾乎差別不大。下面是logback的優勢:

  • 更快的執行速度
  • 充分的測試
  • logback-classic 非常自然的實現了SLF4J
  • 豐富的擴充套件文件
  • 可以使用使用XML配置檔案或者Groovy
  • 自動重新載入配置檔案
  • 優雅地從I/O錯誤中恢復
  • 自動清除舊的日誌歸檔檔案
  • 自動壓縮歸檔日誌檔案

更多優點可以參考官方文件:中文版 英文版

預設情況下,Spring Boot會用Logback來記錄日誌,並用INFO級別輸出到控制檯

使用logbacck

使用logbak我們無需引入依賴,因為spring-boot-starter中包含了 spring-boot-starter-logging,該依賴內容就是 Spring Boot 預設的日誌框架 logback。

logbak的日誌級別從低到高分為:

TRACE < DEBUG < INFO < WARN < ERROR < FATAL

如果設定為 WARN則低於WARN的資訊都不會輸出。

Spring Boot中預設配置ERRORWARNINFO級別的日誌輸出到控制檯

自定義日誌配置

在resources目錄下使用如下檔名就能被spring boot掃描到

logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy

Spring Boot官方推薦優先使用帶有-spring的檔名作為你的日誌配置(如使用logback-spring.xml,而不是logback.xml),如果想自定義檔名,可以通過logging.config屬性指定自定義的名字:

logging.config=classpath:my-logging-config.xml

在resources目錄中新建logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logback</contextName>
    <!--檔案儲存在專案根目錄的log資料夾中-->
    <property name="log.path" value="log" />

    <!--輸出到控制檯-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>

    <!--輸出到檔案-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/logback.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--日誌輸出-->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </root>

    <!-- logback:包路徑 -->
    <logger name="me.zhengjie.app.rest" level="WARN" additivity="false"/>

    <!--logback:類的全路徑 -->
    <logger name="me.zhengjie.app.rest.UserController" level="WARN" additivity="false">
        <appender-ref ref="console"/>
    </logger>
</configuration>

節點介紹可以參考Albin 的文章:logback節點配置詳解

啟動專案效果如下

優化顯示效果

修改節點中的內容,修改如下

<encoder>
	<pattern>%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)</pattern>
	<charset>utf-8</charset>
</encoder>

啟動專案,檢視效果

多環境日誌輸出

據不同環境(prod:生產環境,test:測試環境,dev:開發環境)來定義不同的日誌輸出,在 logback-spring.xml中使用 springProfile 節點來定義,方法如下:

檔名稱不是logback.xml,想使用spring擴充套件profile支援,要以logback-spring.xml命名

<!-- 測試環境+開發環境. 多個使用逗號隔開 -->
<springProfile name="test,dev">
    <logger name="me.zhengjie.app.rest" level="info" />
</springProfile>
<!-- 生產環境. -->
<springProfile name="prod">
    <logger name="me.zhengjie.app.rest" level="ERROR" />
</springProfile>

可以啟動服務的時候指定 profile (如不指定使用預設)
指定prod 的方式為:

java -jar xxx.jar –spring.profiles.active=prod

在類中使用

程式碼中使用日誌只需要類裡面新增如下程式碼即可

private Logger logger = LoggerFactory.getLogger(this.getClass());

專案原始碼

github:https://github.com/dqjdda/SpringBoot_All

碼雲:https://gitee.com/hgpt/SpringBoot_All

開源後臺管理系統:

歡迎體驗Aurora

github: https://github.com/dqjdda/Aurora

碼雲: https://gitee.com/hgpt/Aurora