log4j2配置解析

1. 添加依赖

在一般项目中使用Log4j2至少需要引用log4j-api-2.x和log4j-core-2.x这两个jar包(老版本),现在只需引入以下一个依赖即可,但是如果想桥接至slf4j,需要额外依赖(两者关系参考另一文章Java日志框架:slf4j作用及其实现原理)

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.12.0</version>
</dependency>

<!-- slf4j与log4j之间的桥接包-->
<dependency>
   	<groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.25</version>
</dependency>

在spring boot项目中使用Log4j2

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <!-- 排除spring boot默认日志logback -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependency>
        <!--同时引入这两个依赖时,因为该jar依赖于前者,所以只需在前者中排除掉自带的logging依赖即可 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>      
        </dependency>

        <!-- 引入log4j2依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

依赖添加完成后,我们看一下都有什么jar包
log4j2配置解析
第一个jar的作用是将log4j2与slf4j之间的桥接包,起绑定作用
第二个以及第三个是log4j2的核心包
第四个是java.util.logging.Logger与slf4j之间的桥接包

2. 添加配置文件

配置文件的加载主要逻辑在ConfigurationFactory这个类中,类容较多,能力有限不做过多分析,如深究,建议从
org.apache.logging.log4j.core.LoggerContext中start方法开始debug跟。

package org.apache.logging.log4j.core.config;
// **************略****************
public abstract class ConfigurationFactory extends ConfigurationBuilderFactory {

    public ConfigurationFactory() {
        super();
        // TEMP For breakpoints
    }

    /**
     * Allows the ConfigurationFactory class to be specified as a system property.
     */
    public static final String CONFIGURATION_FACTORY_PROPERTY = "log4j.configurationFactory";
    /**
     * Allows the location of the configuration file to be specified as a system property.
     */
    public static final String CONFIGURATION_FILE_PROPERTY = "log4j.configurationFile";

配置文件可以手动指定,但我们通常的选择是只提供文件,让log4j自己去找,log4j有默认的5个格式工厂

static List<ConfigurationFactory> getFactories() {
        return factories;
    }

每个工厂支持一个或多个后缀,分别是{.properties},{.yml以及.yaml},{.jsn以及.json},{.xml以及*},{.springBoot}
log4j2配置解析
如果什么都没配置,springBoot项目中会自动生成一个默认配置。

上一篇:springboot日志开启SLF4J


下一篇:Java log日志框架