Logback 簡介
Logback 是由 SLF4J 作者開發的新一代日志架構,用于替代 log4j。
主要特點是效率更高,架構設計夠通用,适用于不同的環境。
Logback 分為三個子產品:logback-core,logback-classic和logback-access。
logback-core 子產品是其他兩個子產品的基礎。
logback-classic 子產品是 core 的擴充,是log4j的改進版。logback-classic 本身實作了 SLF4J API,是以可以很容易的在 logback 和其他日志架構之間來回切換,例如 log4j、java.util.logging(JUL)。
logback-access 子產品內建了 Servlet 容器,提供了 HTTP 通路日志的功能。
官網:
http://logback.qos.ch中文網:
http://www.logback.cngithub:
https://github.com/qos-ch/logbackLogback 使用
1.使用 logback-spring.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志級别從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設定為WARN,則低于WARN的資訊都不會輸出 -->
<!-- scan:當此屬性設定為true時,配置檔案如果發生改變,将會被重新加載,預設值為true。 -->
<!-- scanPeriod:設定監測配置檔案是否有修改的時間間隔,如果沒有給出時間機關,預設機關是毫秒。當scan為true時,此屬性生效。預設的時間間隔為1分鐘。 -->
<!-- debug:當此屬性設定為true時,将列印出logback内部日志資訊,實時檢視logback運作狀态。預設值為false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 定義日志根目錄 -->
<property name="LOG_PATH" value="/usr/local/log/" />
<!-- 定義應用名稱 -->
<property name="APP_NAME" value="springboot-logback" />
<!-- 應用名稱 -->
<contextName>${APP_NAME}</contextName>
<!-- 引用 Spring Boot 中預設的 logback 配置 -->
<!-- <include resource="org/springframework/boot/logging/logback/base.xml" /> -->
<!-- 可以動态修改日志輸出等級 -->
<jmxConfigurator />
<!--輸出到控制台-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是為開發使用,隻配置最底級别,控制台輸出的日志級别是大于或等于此級别的日志資訊-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
<!-- 設定字元集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 時間滾動輸出 level為 INFO 日志 -->
<appender name="INFO_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${APP_NAME}-info.log</File>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
</encoder>
<!-- 日志記錄器的滾動政策,按日期,按大小記錄,日志按天分類壓縮儲存-->
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>${LOG_PATH}${APP_NAME}/info/%d{yyyy-MM-dd}-%i.log.gz
</FileNamePattern>
<!--日志檔案保留天數-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<!-- 時間滾動輸出 level為 ERROR 日志 -->
<appender name="ERROR_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${APP_NAME}-error.log</File>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
</encoder>
<!-- 日志記錄器的滾動政策,按日期,按大小記錄,日志按天分類壓縮儲存-->
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>256MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>${LOG_PATH}${APP_NAME}/error/%d{yyyy-MM-dd}-%i.log.gz
</FileNamePattern>
<!--日志檔案保留天數-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<!-- 設定需要列印日志的包及輸出級别 -->
<logger name="org.springframework.web" level="INFO" />
<logger name="cn.zwqh.springboot.controller" level="TRACE" />
<!--
使用mybatis的時候,sql語句隻有在 debug 級别下才會列印
-->
<logger name="cn.zwqh.springboot.dao" level="debug" />
<!--
root節點是必選節點,用來指定最基礎的日志輸出級别,隻有一個level屬性
level:用來設定列印級别,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
不能設定為INHERITED或者同義詞NULL。預設是DEBUG
可以包含零個或多個元素,辨別這個appender将會添加到這個logger。
-->
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>
2.使用 logback.groovy 配置
使用 groovy 配置需要添加依賴
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.17</version>
</dependency>
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.classic.filter.ThresholdFilter
import ch.qos.logback.core.ConsoleAppender
import ch.qos.logback.core.rolling.RollingFileAppender
import ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy
import java.nio.charset.Charset
import static ch.qos.logback.classic.Level.DEBUG
import static ch.qos.logback.classic.Level.ERROR
import static ch.qos.logback.classic.Level.INFO
import static ch.qos.logback.classic.Level.TRACE
scan("60 seconds")
def LOG_PATH = "/usr/local/log/"
def APP_NAME = "springboot-logback"
context.name = "${APP_NAME}"
jmxConfigurator()
appender("CONSOLE", ConsoleAppender) {
filter(ThresholdFilter) {
level = DEBUG
}
encoder(PatternLayoutEncoder) {
pattern = "%d [%t] %5p %c:%L - %m%n"
charset = Charset.forName("UTF-8")
}
}
appender("INFO_FILE", RollingFileAppender) {
file = "${LOG_PATH}${APP_NAME}-info.log"
encoder(PatternLayoutEncoder) {
pattern = "%d [%t] %5p %c:%L - %m%n"
charset = Charset.forName("UTF-8")
}
rollingPolicy(TimeBasedRollingPolicy) {
timeBasedFileNamingAndTriggeringPolicy(SizeAndTimeBasedFNATP) {
maxFileSize = "100MB"
}
fileNamePattern = "${LOG_PATH}${APP_NAME}/info/%d{yyyy-MM-dd}-%i.log.gz"
maxHistory = 30
}
}
appender("ERROR_FILE", RollingFileAppender) {
file = "${LOG_PATH}${APP_NAME}-error.log"
filter(ThresholdFilter) {
level = ERROR
}
encoder(PatternLayoutEncoder) {
pattern = "%d [%t] %5p %c:%L - %m%n"
charset = Charset.forName("UTF-8")
}
rollingPolicy(TimeBasedRollingPolicy) {
timeBasedFileNamingAndTriggeringPolicy(SizeAndTimeBasedFNATP) {
maxFileSize = "256MB"
}
fileNamePattern = "${LOG_PATH}${APP_NAME}/error/%d{yyyy-MM-dd}-%i.log.gz"
maxHistory = 30
}
}
logger("org.springframework.web", INFO)
logger("cn.zwqh.springboot.controller", TRACE)
logger("cn.zwqh.springboot.dao", DEBUG)
root(INFO, ["CONSOLE", "INFO_FILE", "ERROR_FILE"])
詳細的 logback.groovy 文法可以參考 http://logback.qos.ch/manual/groovy.html 。logback 也提供了 logback.xml 轉 logback.groovy 的線上工具,位址: http://logback.qos.ch/translator/asGroovy.html (include 标簽未作解析,是以轉換前把該标簽去除,否則會報錯)
logback.xml 配置說明
configuration
配置檔案的根節點,主要包含以下三個屬性:
- scan:當此屬性設定為true時,配置檔案如果發生改變,将會被重新加載,預設值為true。
- scanPeriod:設定監測配置檔案是否有修改的時間間隔,如果沒有給出時間機關,預設機關是毫秒。當scan為true時,此屬性生效。預設的時間間隔為1分鐘。
- debug:當此屬性設定為true時,将列印出logback内部日志資訊,實時檢視logback運作狀态。預設值為false。
contextName
設定日志上下文名稱,後面輸出格式中可以通過定義 %contextName 來列印日志上下文名稱。
property
配置檔案的變量定義,name 代表變量的名稱,value 代表變量定義的值。通過定義的值會被插入到logger上下文中。定義變量後,可以使“${name}”來使用變量。
jmxConfigurator
開啟 JMX 的功能,可以從預設配置檔案,指定檔案或URL重新配置登入,列出記錄器并修改記錄器級别。
JMX(Java Management Extensions,即 Java 管理擴充)是一個為應用程式、裝置、系統等植入管理功能的架構。JMX 可以跨越一系列異構作業系統平台、系統體系結構和網絡傳輸協定,靈活的開發無縫內建的系統、網絡和服務管理應用。相關文檔: http://logback.qos.ch/manual/jmxConfig.html
appender
日志輸出元件,主要負責日志的輸出以及格式化日志。常用的屬性有name和class。
- name:appender元件的名稱,後面給logger指定appender使用。
- class:appender的具體實作類。常用的有 ConsoleAppender、FileAppender、RollingFileAppender。
appender的具體實作類:
- ConsoleAppender:向控制台輸出日志内容的元件,隻要定義好encoder節點就可以使用。
- FileAppender:向檔案輸出日志内容的元件,用法也很簡單,不過由于沒有日志滾動政策,一般很少使用。
- RollingFileAppender:向檔案輸出日志内容的元件,同時可以配置日志檔案滾動政策,在日志達到一定條件後生成一個新的日志檔案。
Threshold filter
Logback 定義的日志列印級别的過濾器。可以過濾掉指定級别以下的日志不輸出到檔案。
encoder charset
表示對日志進行編碼。
encoder pattern
- %d{HH:mm:ss.SSS} —— 日志輸出時間。
- %thread —— 輸出日志的程序名稱,用方括号括起來。這個資訊在 Web 應用以及異步任務進行中很有用。
- %-5level —— 日志級别,使用5個字元靠左對齊。
- %logger{36} —— 日志輸出者的名字。
- %msg —— 日志消息。
- %n —— 換行符。
rollingPolicy
日志記錄器的滾動政策。
- FileNamePattern:定義日志的切分方式,本文把每一天的日志歸檔到一個檔案。
- MaxHistory:表示日志保留的天數,本文設定為30天。
logger
用來設定某一個包或者具體的某一個類的日志列印級别、以及指定。
- name:用來指定受此logger限制的某一個包或者具體的某一個類。
- level:用來設定列印級别,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,還有一個特殊值INHERITED或者同義詞NULL,代表強制執行上級的級别。如果未設定此屬性,那麼目前logger将會繼承上級的級别。
使用mybatis的時候,sql語句隻有在 debug 級别下才會列印
root
必選節點,用來指定最基礎的日志輸出級别,隻有一個level屬性
level:用來設定列印級别,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能設定為INHERITED或者同義詞NULL。預設是 DEBUG 可以包含零個或多個元素,辨別這個appender将會添加到這個logger。
示例代碼
github 碼雲非特殊說明,本文版權歸
朝霧輕寒所有,轉載請注明出處.
原文标題:Spring Boot 2.X(十四):日志功能 Logback
原文位址:
https://www.zwqh.top/article/info/23