log4j2配置文件

Posted luckygxf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j2配置文件相关的知识,希望对你有一定的参考价值。

项目里面经常用到日志,Java开发一般用log4j、slf4j这些框架,看着配置文件有点懵。这几天看公司代码的时候,也有用到log4j,感觉要复杂一点。在本地打log,也有打到hive里面存的。看了一下公司日志的组件架构,有两种方式。

一种打到服务器本地,通过agent收集到hive,kafka等组件,供日志中心、服务管理中心、storm等组件消费。

一种通过rpc服务打到本地agent,在通过agent上报到远程服务器,看了源码,是扩展了log4j框架。log4j支持这种扩展,继承一些框架的类。spring也支持这种扩展,很多公司也在使用这种扩展。比如,spring2.0开始支持schema的扩展,在dubbo中也用到了,封装了自己的xml标识。

这里贴一个我写的log4j demo

maven依赖

<dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.8.0-beta2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.11.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.1</version>
        </dependency>
    </dependencies>

测试类

public class HelloSlf4j {
    public static void main(String[] args) {
        for(int i = 0; i < 10; i++){
            Logger logger = LoggerFactory.getLogger(HelloSlf4j.class);
            logger.debug("Hello Slf4j");
        }
    }
}

配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
        <File name="MyFile" fileName="all.log" immediateFlush="false" append="false">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
        <File name="MyFile1" fileName="all1.log" immediateFlush="false" append="true">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
        <File name="async" fileName="async.log" immediateFlush="false" append="true">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>

        <Async name="scribeAsyncAppender" errorRef="async" bufferSize="102400" blocking="false">
            <AppenderRef ref="async"/>
        </Async>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <!--<AppenderRef ref="Console" />-->
            <AppenderRef ref="MyFile"/>
            <AppenderRef ref="scribeAsyncAppender"/>
        </Root>
        <Logger name="com.gxf.slf4j.HelloSlf4j" level="debug">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="MyFile1"/>
        </Logger>
    </Loggers>
</Configuration>

这里主要需要理清楚几个组件之间的关系,Root、Logger、Appender

Root类似于一个父类的Logger,所有的logger都继承他的属性,logger自定义的属性会覆盖掉父类log配置

Logger对外提供使用接口,如log.info()等方法。可以有多个Appender

Appender是往控制台、文件中写内容的组件

以上是关于log4j2配置文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 IDE 中使用一个 log4j2 配置文件进行运行时,使用另一个 log4j2 配置文件进行打包/部署?

log4j2的资源文件具体怎么配置

log4j2文件配置

log4j2文件配置

log4j2配置文件xml详细了解

SpringBoot配置多环境log4j2