Logback簡介及配置文件logback.xml詳解


logback簡介

​ Logback是由log4j創始人設計的另一個開源日志組件,官方網站: http://logback.qos.ch

  1. logback的結構:主要由三個模塊組成:
    • logback-core // 基礎模塊,其他模塊基於此

    • logback-classic // 它是log4j的一個改良版本,同時它完整實現了slf4j API,可以更換成其它日志系統,如log4j

    • logback-access // 訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能

  2. 用它取代log4j的理由在於以下優勢:

    ​ 做到了更快的實現、非常充分的測試、很自然地實現了SLF4、非常詳盡的官方文檔、自動重新加載配置文件、Lilith是log事件的觀察者,和log4j的chainsaw類似、謹慎的模式和非常友好的恢復(可以實現多個線程同時寫一個日志文件)、配置文件可以處理不同的情況、Filters(過濾器)、SiftingAppender、自動壓縮已經打出來的log文件、堆棧樹帶有包版本、自動去除舊的日志文件等。

logback.xml配置文件詳解

  1. 配置文件示例
    <?xml version="1.0" encoding="UTF-8"?> <!-- 配置文件修改時重新加載,默認true --> <configuration scan="true"> <!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑--> <property name="CATALINA_BASE" value="**/logs"></property> <!-- 控制台輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder charset="UTF-8"> <!-- 輸出日志記錄格式 --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 第一個文件輸出,每天產生一個文件 --> <appender name="FILE1" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 輸出文件路徑+文件名 --> <fileNamePattern>${CATALINA_BASE}/aa.%d{yyyyMMdd}.log</fileNamePattern> <!-- 保存30天的日志 --> <maxHistory>30</maxHistory> </rollingPolicy> <encoder charset="UTF-8"> <!-- 輸出日志記錄格式 --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 第二個文件輸出,每天產生一個文件 --> <appender name="FILE2" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${CATALINA_BASE}/bb.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${CATALINA_BASE}/bb.%d{yyyyMMdd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder charset="UTF-8"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <appender name="CUSTOM" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${CATALINA_BASE}/custom.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <fileNamePattern>${CATALINA_BASE}/custom.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- keep 30 days' worth of history --> <maxHistory>30</maxHistory> </rollingPolicy> <encoder charset="UTF-8"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 設置日志輸出級別 --> <root level="ERROR"> <appender-ref ref="CONSOLE" /> </root> <logger name="file1" level="DEBUG"> <appender-ref ref="FILE1" /> </logger> <logger name="file1" level="INFO"> <appender-ref ref="FILE2" /> </logger> <!-- 自定義logger --> <logger name="custom" level="INFO"> <appender-ref ref="CUSTOM" /> </logger> </configuration> 
  2. 配置文件說明

    ​ 一個元素

    ​ 0或多個

    ​ 0或多個

image

  1. logback配置文件加載說明

    logback在啟動時:

    1. 在 classpath 中尋找 logback-test.xml文件
    2. 如果找不到 logback-test.xml,則在 classpath 中尋找 logback.groovy 文件
    3. 如果找不到 logback.groovy,則在 classpath 中尋找 logback.xml文件
    4. 如果上述的文件都找不到,則 logback 會使用 JDK 的 SPI 機制查找 META-INF/services/ch.qos.logback.classic.spi.Configurator 中的 logback 配置實現類,這個實現類必須實現 Configuration 接口,使用它的實現來進行配置
    5. 如果上述操作都不成功,logback 就會使用它自帶的 BasicConfigurator 來配置,並將日志輸出到 console
  2. 打印級別

    TRACE<DEBUG<INFO<WARN<ERROR,默認DEBUG

logback快速上手

  1. 依賴的jar包:

    slf4j-api

    logback-core

    logback-classic

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

    【注】其中slf4j-api不是logback的一部分,是另一個項目,通常結合使用

  2. 代碼示例(兩種):
    // 第一種,直接聲明一個對象 public class Slf4JLoggerTest1 { private static final Logger logger = LoggerFactory.getLogger(SimpleDemo.class); public static void main(String[] args) { logger.info("Hello,tese1, this is a line of log message logged by Logback"); } } // 第二種,在類的配置上添加@slf4j注解(**借助lombok實現,原理同第一種**) @Slf4j public class Slf4JLoggerTest2 { public static void main(String[] args) { log.info("Hello,tese2, this is a line of log message logged by Logback"); } } 

參考資料:

​ [1] logback配置詳解https://segmentfault.com/a/1190000008315137

​ [2] logback的使用和logback.xml詳解https://www.cnblogs.com/warking/p/5710303.html

本文來自博客園,作者:ergwang,轉載請注明原文鏈接:https://www.cnblogs.com/ergwang/p/14600913.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM