1. 程式人生 > 其它 >springboot 與logback日誌整合

springboot 與logback日誌整合

Logback的介紹

Logback是由log4j創始人設計的又一個開源日誌元件。logback當前分成三個模組:logback-core,logback- classic和logback-access。logback-core是其它兩個模組的基礎模組。logback-classic是log4j的一個 改良版本。此外logback-classic完整實現SLF4J API使你可以很方便地更換成其它日誌系統如log4j或JDK14 Logging。logback-access訪問模組與Servlet容器整合提供通過Http來訪問日誌的功能。

Logback的優點

    1. 執行速度快,初始化記憶體載入小;
    2. 原生實現了 SLF4J API,不需要進行轉換;
    3. 配置簡單,並可以適應多種環境;
    4. 可以定時的刪除過期日誌;
    5. 更為強大的過濾器,不必因更改日誌級別而產生大量的日誌;
    6. 可以從 IO 錯誤中進行恢復;
    7. 。。。。

Logback的使用

1、jar包引入

<!--如果是web專案直接引入這個包就行-->
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

 

<!--如果不是web專案直接引入這3個包就行-->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-api</artifactId>
</dependency>
    
    
<dependency>
   <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    
</dependency>
    
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
</dependency>

  

2、(我這使用的是 xml 也可直接在 application.yml 中配置 原理相同)xml配置檔案(注意xml檔名約束: 【官方推薦】logback-spring.xml 也可以 logback.xml 都會自動載入)

<?xml version="1.0" encoding="UTF-8"?>

<!--    scan: 當此屬性設定為true時,配置檔案如果發生改變,將會被重新載入,預設值為true。
    scanPeriod: 設定監測配置檔案是否有修改的時間間隔,如果沒有給出時間單位,預設單位是毫秒。當scan為true時,此屬性生效。預設的時間間隔為1分鐘。
    debug: 當此屬性設定為true時,將打印出logback內部日誌資訊,實時檢視logback執行狀態。預設值為false。-->
<configuration scan="true" scanPeriod="60 seconds" debug="false"> <!--共5個節點-->
    <!--子節點<timestamp>:獲取時間戳字串,他有兩個屬性key和datePattern
    key: 標識此<timestamp> 的名字;
    datePattern: 設定將當前時間(解析配置檔案的時間)轉換為字串的模式,遵循java.txt.SimpleDateFormat的格式。
    -->
    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
    <!--設定上下文名稱  節點一
    每個logger都關聯到logger上下文,預設上下文名稱為“default”。但可以使用設定成其他名字,用於區分不同應用程式的記錄。
    一旦設定,不能修改,可以通過%contextName來列印日誌上下文名稱。
    -->
    <contextName>logback</contextName>
    <!--設定變數<property>  節點二
    用來定義變數值的標籤, 有兩個屬性,name和value;其中name的值是變數的名稱,value的值時變數定義的值。
    通過定義的值會被插入到logger上下文中。定義變數後,可以使“${}”來使用變數。
    -->
    <property name="LOG_HOME" value="F:\\test\\logs" ></property>
    <!--設定輸出格式-->
    <property name="ENCODER_PATTERN"
              value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n)"/>

    <!--設定<appender>  節點三
    appender用來格式化日誌輸出節點,有倆個屬性name和class,class用來指定哪種輸出策略,常用就是控制檯輸出策略和檔案輸出策略。
    #####控制檯輸出ConsoleAppender:
    -->
    <!--輸出到控制檯-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%Thread表示執行緒名,%-5level:級別從左顯示5個字元寬度 %msg:日誌訊息 %n是換行符-->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n)</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!--輸出到檔案-->
    <appender name="SYSTEM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_HOME}/pi.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--這是每天建立一個log檔案  重點{yyyy-MM-dd} 加時分秒不能使用“:”號,否則不會切割日誌-->
            <FileNamePattern>${LOG_HOME}/pi.%d{yyyy-MM-dd HH_mm}.%i.log</FileNamePattern>
            <!--最多儲存30天-->
            <maxHistory>30</maxHistory>
            <!--設定日誌檔案總大小-->
            <totalSizeCap>50MB</totalSizeCap>
            <!--設定切割日誌檔案-->
            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--切割檔案大小的大小-->
                <MaxFileSize>10MB</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>${ENCODER_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!--設定<root> 節點四
    root節點是必選節點,用來指定最基礎的日誌輸出級別,只有一個level屬性。
    level:用來設定列印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能設定為INHERITED或者同義詞NULL。
    預設是DEBUG。  可以包含零個或多個元素,標識這個appender將會新增到這個loger
    -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="SYSTEM_FILE"/>
    </root>

    <!--設定<logger> 節點五
        <logger>用來設定某一個包或者具體的某一個類的日誌列印級別、以及指定<appender>。<logger>僅有一個name屬性,一個可選的level和一個可選的additivity屬性。
        name 用來指定受此loger約束的某一個包或者具體的某一個類。
        level 用來設定列印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,還有一個特俗值INHERITED或者同義詞NULL,
        代表強制執行上級的級別。如果未設定此屬性,那麼當前logger將會繼承上級的級別。
        additivity 是否向上級logger傳遞列印資訊。預設是true。false:表示只用當前logger的appender-ref。
        true:表示當前logger的appender-ref和rootLogger的appender-ref都有效。

    -->
    <logger name="com.wwc.demo.*" level="INFO" additivity="true"></logger>


    </configuration>

 3、類中使用建立 logger 物件 

//導包要導
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


private Logger logger = LoggerFactory.getLogger(this.getClass());
public static void main(String[] args) {
logger.trace("日誌輸出 trace");
logger.debug("日誌輸出 debug");
logger.info("日誌輸出 info");
logger.warn("日誌輸出 warn");
logger.error("日誌輸出 error");
}