一、前言
前面介绍了slf4j相关的知识点, 提到了实现模块是通过SLF4JServiceProvider
进行自定义日志框架的, 本节就来介绍logback的LogbackServiceProvider
二、源码解析
LogbackServiceProvider
public class LogbackServiceProvider implements SLF4JServiceProvider {
public void initialize() {
// 日志上下文
defaultLoggerContext = new LoggerContext();
// 设置名称:default
defaultLoggerContext.setName(CoreConstants.DEFAULT_CONTEXT_NAME);
// 初始化日志上下文
initializeLoggerContext();
// 标记上下文已启动, 顺便发送启动事件
defaultLoggerContext.start();
markerFactory = new BasicMarkerFactory();
mdcAdapter = new LogbackMDCAdapter();
// set the MDCAdapter for the defaultLoggerContext immediately
defaultLoggerContext.setMDCAdapter(mdcAdapter);
}
}
- 构建了一个logback中最核心的类
LoggerContext
, 默认名字为default - 进行初始化, initializeLoggerContext
- 标记上下文已启动, 顺便发送启动事件
核心的部分是初始化日志上下文initializeLoggerContext
private void initializeLoggerContext() {
try {
try {
// 解析配置文件
new ContextInitializer(defaultLoggerContext).autoConfig();
} catch (JoranException je) {
Util.report("Failed to auto configure default logger context", je);
}
// LOGBACK-292
if (!StatusUtil.contextHasStatusListener(defaultLoggerContext)) {
StatusPrinter.printInCaseOfErrorsOrWarnings(defaultLoggerContext);
}
// contextSelectorBinder.init(defaultLoggerContext, KEY);
} catch (Exception t) {
// see LOGBACK-1159
Util.report("Failed to instantiate [" + LoggerContext.class.getName() + "]",