logback實踐筆記
阿新 • • 發佈:2019-01-08
前言
每次看公司配置好的logback檔案的時候,都不知道什麼意思。導致有的時候,一些專案發到測試環境的時候,有的專案沒有列印日誌,自己都不知道哪裡有問題。所以自己新建一個springboot專案,使用logback來列印日誌的輸出格式。
日誌區分
slf4j可以認為是一系列的日誌介面,而log4j,logback是具體實現了的日誌框架,官方翻譯過來是這樣說的:
slf4j譯為簡單的日誌門面,是日誌框架的抽象。而log4j和logback是眾多的日誌框架中的幾種。
我主要對logback進行了實戰。
簡介
Logback是作為log4j的後續版本,Logback的體系結構足夠通用。為了在不同的情況下應用,目前有三大模組:logback-core,logback-classic,logback-access。
- logback-core : 核心模組,為了其他兩個模組奠定了基礎。
- logback-classic: 可以看作log4f的改進版本,此外,logback-classic本身實現了SLF4J API。
- logback-access: 模組與Servlet容器(如Tomcat和Jetty)整合,以提供HTTP訪問日誌功能。
配置檔案
在springboot專案中,會先查詢是否有logback-test.xml檔案,有就會載入。沒有就查詢logback.xml檔案,裡面有三個比較大的屬性。分別是root,logger,appender。一些變數的配置屬性property,contextName。
root
根目錄屬性,每個logback檔案中,只有一個level屬性,設定整個專案的日誌輸出水平。如果設定多個root的話,以最高的level為準
logback.xml程式碼:
<?xml version="1.0" encoding="utf-8" ?> <!-- debug=是否列印logback內部日誌 scan=是否重新載入 scanPeriod=多久掃描一次 --> <configuration debug="true" scan="true" scanPeriod="30 seconds"> <!-- 下次再詳細介紹 --> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern>%d{YYYY年MM月dd日 HH:mm:ss} | %thread | %-5level %logger - %msg%n</Pattern> </encoder> </appender> <!-- 控制檯只會輸出error的日誌 --> <root level="info"> <appender-ref ref="stdout"/> </root> <root level="error"> <appender-ref ref="stdout"/> </root> </configuration>
測試程式碼:
package com.example.logback.Demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* @ClassName LogbackTest
* @Description TODO
* @Author ouyangkang
* @Date 2019-01-03 16:34
**/
@Component
public class LogbackTest {
private final Logger logger = LoggerFactory.getLogger("測試");
public void test() {
logger.info("=========>info");
logger.error("=========>error");
logger.debug("=========>debug");
}
}
測試類:
package com.example.logback;
import com.example.logback.Demo.LogbackTest;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@RunWith(SpringRunner.class)
@SpringBootTest
public class LogbackApplicationTests {
@Resource
private LogbackTest logbackTest;
@Test
public void contextLoads() {
logbackTest.test();
}
}
結果如下:
只輸出error中的欄位。
下一篇我將把logback.xml中的logger詳細介紹一下,和我自己寫logger屬性Demo的坑。這個坑也讓我比較深刻的認識了logback。其實上面程式碼是有點問題的,不知道你看的出來嗎。一旦我是用logger來列印日誌這個坑就出來了。