1. 程式人生 > >Logback日誌配置的簡單使用

Logback日誌配置的簡單使用

main 如果 std 創建 成功 file dai 出了 html

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的優點還有很多,這裏我就不一一列舉了。詳細的可以查看官方的Api文檔。
    地址:https://logback.qos.ch/documentation.html

Logback的配置說明

關於這塊的配置說明,我就簡單的列舉一些比較常用配置來進行說明。如果還想了解更多,請看官方的文檔說明。

Logback的層級說明

簡單的層級結構,實際有更多,僅供參考。

configuration  
    root
    logger                     
    property                        
    appender 
        layout 
        rollingPolicy
           Pattern
           fileNamePattern
           maxFileSize
           maxHistory
           totalSizeCap

具體說明

configuration 根節點, 一般有三個屬性,分別是scan、scanPeriod和debug。

  • scan:是否自動加載,默認為true。
  • scanPeriod:監聽修改時間間隔,默認一分鐘。
  • debug: 是否查看logback運行狀態,默認true。

那麽我們要使用這個的話,可以進行如下配置:

<configuration  scan="true" scanPeriod="30 seconds" debug="true">
...
</configuration>

root 和logger 子節點,用於指定輸入的日誌級別。

  • root :這個是指定主日誌的級別。
  • logger :這個是指定自定義日誌的級別。

說明:root 指定的日誌級別就是用類進行輸出的日誌,例如:

  private static Logger LOG = LoggerFactory.getLogger(logbackTest.class);

logger 指定的日誌級別是自定義的級別,例如:

private static Logger LOG2 = LoggerFactory.getLogger("oneInfo");

他們的用法如下:

<logger name="oneInfo" level="DEBUG" additivity="false">
       <appender-ref ref="ONE_INFO" />
    </logger>
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE" />
    </root>

說明二: level 是日誌輸出的級別,additivity表示是否在控制臺打印該日誌。

property 子節點,一般用來定義變量值。有兩個屬性name和value。類似Java中Map的key和value。

  • name: 變量的名稱
  • value: 變量的值

用法如下:

<property name="LOG_HOME" value="logs/pcm"/>

說明:value指定的文件路徑,會在項目同級目錄下自動生成,無需手動創建。

appender 子節點,負責寫日誌的組件。有兩個屬性,name和class。

  • name: 自定義名稱。
  • class:對應自定義名稱的全限定名,就是使用何種方式進行日誌的輸出。

這個非常重要,也可以說是logback的核心吧。簡單的用法如下:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
</appender>

說明:定義一個STDOUT名稱,在控制臺進行輸出。

layout和Pattern 這兩個一般是一起使用的。

  • layout:格式化日誌信息;
  • Pattern :layout 子節點,定義輸出信息的格式;

簡單的用法如下:

<layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
            </Pattern>
</layout>

說明:Pattern裏面格式的%d表示輸出的時間格式,%thread 表示輸出的線程名稱,%-5level 表示字符寬度,%msg 表示輸出的信息,%n表示換行。

rollingPolicy、fileNamePattern、maxFileSize、 maxHistory和totalSizeCap 這些一般用於對日誌進行滾動,也就是日誌切割管理之類的。

  • rollingPolicy: 決定日誌滾動行為,一般用於日誌切割。
  • fileNamePattern:必要的節點,一般用於指定日誌的文件的路徑以及生成格式。
  • maxFileSize:單個日誌文件最大值,達到之後就進行切割。
  • maxHistory:日誌文件最多保留的天數,也就是過期時間。
  • totalSizeCap : 日誌文件總體的最大值,達到之後就不再產生日誌。

簡單的用法如下:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>31</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
    </appender>

說明:這段的配置意義是,每天產生一個日誌文件,如果超出了10M,日誌就進行切割,並且在日誌文件名稱上加一,日誌文件最多保持31天,日誌文件總共最大為10G。

Logback使用說明

在對logback日誌的配置文件進行了簡單的說明之後,那我們來簡單的使用logback吧。
logback.xml 使用需要依賴三個 jar 包,分別是 slf4j-api,logback-core,logback-classic。
mavan配置如下:

<dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-api</artifactId>
     <version>1.7.25</version>
    </dependency>
    
    
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.2.3</version>
    </dependency>

成功在maven添加依賴包之後,我們寫個簡單的demo來測試下吧。
定義三個log日誌,一個主log,兩個自定義log。
整體配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="30 seconds" debug="true">
    <property name="LOG_HOME" value="logs/pcm"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
            </Pattern>
        </layout>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>31</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
            </Pattern>
        </layout>
    </appender>
    
    <appender name="ONE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/oneInfo/%d{yyyy-MM-dd}/oneInfo.%i.txt</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>31</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
            </Pattern>
        </layout>
    </appender>
    
    <appender name="TWO_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/twoInfo/%d{yyyy-MM-dd}/twoInfo.%i.txt</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>31</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
            </Pattern>
        </layout>
    </appender>
    
    <logger name="oneInfo" level="DEBUG" additivity="false">
       <appender-ref ref="ONE_INFO" />
    </logger>
    <logger name="twoInfo" level="WARN" additivity="true">
       <appender-ref ref="TWO_INFO" />
    </logger>
    
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE" />
    </root>

</configuration>

然後分別在控制臺輸出和文件中進行輸出。
該java的代碼示例如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
* Title: logbackTest
* Description:
* logback日誌測試 
* Version:1.0.0  
* @author pancm
* @date 2018年1月24日
 */
public class logbackTest {
    private static Logger LOG = LoggerFactory.getLogger(logbackTest.class);
    private static Logger LOG2 = LoggerFactory.getLogger("oneInfo");
    private static Logger LOG3 = LoggerFactory.getLogger("twoInfo");
    
    public static void main(String[] args) {
        test();
    }
    
    private static void test(){

        LOG.debug("主程序的debug");
        LOG.info("主程序的info");
        LOG.warn("主程序的warn");
        LOG.error("主程序的error");
        
        LOG2.debug("oneInfo的debug");
        LOG2.info("oneInfo的info");
        LOG2.warn("oneInfo的warn");
        LOG2.error("oneInfo的error");
        
        LOG3.debug("twoInfo的debug");
        LOG3.info("twoInfo的info");
        LOG3.warn("twoInfo的warn");
        LOG3.error("twoInfo的error");
    }

輸出結果如下:

技術分享圖片

日誌的生成目錄:
技術分享圖片

輸出結果的說明:

  • LOG: 因為設置打印的級別是info,所以debug級別的不會打印 。
  • LOG2: 因為自定義配置設定的是 additivity="false" 不在控制臺打印。 所以一條都不會打印,但是debug級別以上的日誌可以在logs/pcm/oneInfo中查看。
  • LOG3: 因為自定義配置設定的是 additivity="true" 可以在控制臺打印。所以會打印兩條warn級別的日誌,日誌也可以在logs/pcm/oneInfo中查看。

其它

參考:
https://logback.qos.ch/documentation.html
https://www.cnblogs.com/warking/p/5710303.html

到此,本文的logback日誌簡單講解結束,謝謝閱讀!

Logback日誌配置的簡單使用