logback

1、组件图

logback_第1张图片

1.1 Appender

 logback_第2张图片

 Appender继承LifeCycle,FilterAttachable, ContextAware。

1.2 Layout

logback_第3张图片

 Layout继承LifeCycle和ContextAware

1.3 配置文件

其结构如下

logback_第4张图片

2、初始化

2.1 配置文件读取

是通过ContextInitializer.autoConfig实现的。首先读取属性logback.configurationFile,没有就使用logback-test.xml文件,如果没有就使用logback.groovy,如果没有使用logback.xml文件 ,如果没有使用加载器查找Configurator的实现类,如果没有就使用默认的BasicConfigurator。

public void autoConfig() throws JoranException {
        StatusListenerConfigHelper.installIfAsked(loggerContext);
        URL url = findURLOfDefaultConfigurationFile(true);
        if (url != null) {
            configureByResource(url);
        } else {
            Configurator c = EnvUtil.loadFromServiceLoader(Configurator.class);
            if (c != null) {
                try {
                    c.setContext(loggerContext);
                    c.configure(loggerContext);
                } catch (Exception e) {
                    throw new LogbackException(String.format("Failed to initialize Configurator: %s using ServiceLoader", c != null ? c.getClass()
                                    .getCanonicalName() : "null"), e);
                }
            } else {
                BasicConfigurator basicConfigurator = new BasicConfigurator();
                basicConfigurator.setContext(loggerContext);
                basicConfigurator.configure(loggerContext);
            }
        }
    }

public URL findURLOfDefaultConfigurationFile(boolean updateStatus) {
        ClassLoader myClassLoader = Loader.getClassLoaderOfObject(this);
        URL url = findConfigFileURLFromSystemProperties(myClassLoader, updateStatus);
        if (url != null) {
            return url;
        }

        url = getResource(TEST_AUTOCONFIG_FILE, myClassLoader, updateStatus);
        if (url != null) {
            return url;
        }

        url = getResource(GROOVY_AUTOCONFIG_FILE, myClassLoader, updateStatus);
        if (url != null) {
            return url;
        }

        return getResource(AUTOCONFIG_FILE, myClassLoader, updateStatus);
    }

2.2 JoranConfigurator

配置文件的处理时序为

logback_第5张图片

(1)创建SaxEventRecorder,构造SAXParser,解析配置文件 。

(2)构造SaxEventInterpreter,创建SimpleRuleStore,添加结点处理规则,同时添加隐式规则以及默认的嵌套组件规则。

(3)播放SaxEvent,处理xml节点,得到Model。

(4)创建DefaultProcessor,向DefaultProcessor添加Model与Handler的映射关系。

(5)DefaultProcessor处理model。

2.2.1 RuleStore和Action

用于添加ElementPath与元素处理Action之间的映射关系。Action抽象类定义处理元素开始,元素体及元素结束。其关系图为

logback_第6张图片

2.2.2 ModelHandlerBase抽象类 

用于处理Model,包含的处理及后置处理

logback_第7张图片

3 、日志级别

级别包括:TRACE, DEBUG, INFO ,WARN, ERROR

参考资料:

https://logback.qos.ch/

你可能感兴趣的:(架构,logback)