1. 程式人生 > >logback實踐筆記

logback實踐筆記

前言

​ 每次看公司配置好的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();
    }

}

結果如下:

1546939157(1).jpg

只輸出error中的欄位。

下一篇我將把logback.xml中的logger詳細介紹一下,和我自己寫logger屬性Demo的坑。這個坑也讓我比較深刻的認識了logback。其實上面程式碼是有點問題的,不知道你看的出來嗎。一旦我是用logger來列印日誌這個坑就出來了。