Logback簡(jiǎn)介及配置文件logback.xml詳解
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
作者 | ergwang
來(lái)源 | urlify.cn/f2I7ja
logback簡(jiǎn)介
Logback是由log4j創(chuàng)始人設(shè)計(jì)的另一個(gè)開(kāi)源日志組件,官方網(wǎng)站:http://logback.qos.ch。
logback的結(jié)構(gòu):主要由三個(gè)模塊組成:
logback-core // 基礎(chǔ)模塊,其他模塊基于此
logback-classic // 它是log4j的一個(gè)改良版本,同時(shí)它完整實(shí)現(xiàn)了slf4j API,可以更換成其它日志系統(tǒng),如log4j
logback-access // 訪問(wèn)模塊與Servlet容器集成提供通過(guò)Http來(lái)訪問(wèn)日志的功能
用它取代log4j的理由在于以下優(yōu)勢(shì):
做到了更快的實(shí)現(xiàn)、非常充分的測(cè)試、很自然地實(shí)現(xiàn)了SLF4、非常詳盡的官方文檔、自動(dòng)重新加載配置文件、Lilith是log事件的觀察者,和log4j的chainsaw類似、謹(jǐn)慎的模式和非常友好的恢復(fù)(可以實(shí)現(xiàn)多個(gè)線程同時(shí)寫一個(gè)日志文件)、配置文件可以處理不同的情況、Filters(過(guò)濾器)、SiftingAppender、自動(dòng)壓縮已經(jīng)打出來(lái)的log文件、堆棧樹(shù)帶有包版本、自動(dòng)去除舊的日志文件等。
logback.xml配置文件詳解
配置文件示例
<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置文件修改時(shí)重新加載,默認(rèn)true -->
<configuration scan="true">
<!--定義日志文件的存儲(chǔ)地址 勿在 LogBack 的配置中使用相對(duì)路徑-->
<property name="CATALINA_BASE" value="**/logs"></property>
<!-- 控制臺(tái)輸出 -->
<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>
<!-- 第一個(gè)文件輸出,每天產(chǎn)生一個(gè)文件 -->
<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>
<!-- 第二個(gè)文件輸出,每天產(chǎn)生一個(gè)文件 -->
<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>
<!-- 設(shè)置日志輸出級(jí)別 -->
<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>配置文件說(shuō)明
一個(gè)
元素 0或多個(gè)
0或多個(gè)

logback配置文件加載說(shuō)明
logback在啟動(dòng)時(shí):
在 classpath 中尋找 logback-test.xml文件
如果找不到 logback-test.xml,則在 classpath 中尋找 logback.groovy 文件
如果找不到 logback.groovy,則在 classpath 中尋找 logback.xml文件
如果上述的文件都找不到,則 logback 會(huì)使用 JDK 的 SPI 機(jī)制查找 META-INF/services/ch.qos.logback.classic.spi.Configurator 中的 logback 配置實(shí)現(xiàn)類,這個(gè)實(shí)現(xiàn)類必須實(shí)現(xiàn)
Configuration接口,使用它的實(shí)現(xiàn)來(lái)進(jìn)行配置如果上述操作都不成功,logback 就會(huì)使用它自帶的
BasicConfigurator來(lái)配置,并將日志輸出到 console打印級(jí)別
TRACE<DEBUG<INFO<WARN<ERROR,默認(rèn)DEBUG
logback快速上手
依賴的jar包:
slf4j-api
logback-core
logback-classic
【注】其中slf4j-api不是logback的一部分,是另一個(gè)項(xiàng)目,通常結(jié)合使用<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>代碼示例(兩種):
// 第一種,直接聲明一個(gè)對(duì)象
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實(shí)現(xiàn),原理同第一種**)
@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
粉絲福利:Java從入門到入土學(xué)習(xí)路線圖
??????

??長(zhǎng)按上方微信二維碼 2 秒
感謝點(diǎn)贊支持下哈 
