框架——日誌框架——logback——搭建環境

1、搭建環境

  搭建日誌框架非常簡單,需要引入logback-classic和slf4j.api依賴。logback.version替換爲對應的版本即可

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<version>1.7.25</version>
</dependency>
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
	<version>${logback.version}</version>
</dependency>

2、HelloWorld示例 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;

public class HelloWorld {
	public static void main(String[] args) {
		// 工廠模式,通過getLogger方法獲取Logger對象,它的全名爲org.slf4j.Logger
		// 工廠方法的參數可以是類全名,也可以是其對應的Class類
		Logger logger = LoggerFactory.getLogger(HelloWorld.class);
		// 定義了一條logging statement,它的level爲debug,它的message爲"Hello World"
		logger.debug("Hello World");
		// 獲取日誌框架的上下文,它等同於applicationContext在spring框架中的地位
		LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
		// 打印出日誌框架運行的詳細日誌,也可以理解爲分析LoggerContext對象的生命週期。
		StatusPrinter.print(context);
	}
}

  運行日誌如下:

17:04:25.470 [main] DEBUG learn.logback.chapter1.HelloWorld - Hello World
17:04:25,441 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
17:04:25,441 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
17:04:25,441 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
17:04:25,442 |-INFO in ch.qos.logback.classic.BasicConfigurator@31221be2 - Setting up default configuration.

  Logback在運行時總共經歷了4步:

第一步,它首先去查找classpath路徑下的logback-test.xml配置文件。

第二步,查找失敗之後,繼續查找logback.groovy配置文件。

第三步,如果還失敗,繼續查找logback.xml配置文件。

第四步,如果上述三個文件都沒有找到,使用默認的配置。最後的日誌顯示它是BasicConfigurator類。

3、BasicConfigurator

 它繼承ContextAwareBase類,並實現Configurator接口,只有一個默認的構造器和configure方法。

// 沒有實際意義,打印日誌
addInfo("Setting up default configuration.");

// 添加默認的配置的Appender,ConsoleAppender,並設置默認的Encoder
ConsoleAppender<ILoggingEvent> ca = 
new ConsoleAppender<ILoggingEvent>();
ca.setContext(lc);
ca.setName("console");
LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<ILoggingEvent>();
encoder.setContext(lc);

// same as
// PatternLayout layout = new PatternLayout();
// layout.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
TTLLLayout layout = new TTLLLayout();

layout.setContext(lc);
layout.start();
encoder.setLayout(layout);

ca.setEncoder(encoder);
ca.start();
// 添加默認的根Logger,之後會學習到logger的邏輯結構爲樹形結構,樹的跟爲Logger.ROOT_LOGGER_NAME,這個常量的值爲root,所有logger從根logger中繼承Appender
Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME);
rootLogger.addAppender(ca);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章