欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

log4j2的简介及基础配置

程序员文章站 2022-05-24 15:44:23
...

资源链接

log4j2的官网地址

log4j2的API

码云源码

log4j2的简介

  Log4j使用如下图所示的类。

log4j2的简介及基础配置

  使用Log4j 2 API的应用程序将请求日志管理器中带有特定名称的日志记录器。LogManager将定位适当的日志上下文,然后从它获得日志记录器。这使得新的Log4j 2.0版本有了大幅的性能提升、新的插件系统,以及配置设置方面的很多改善。Log4j 1.x 在高并发情况下出现死锁导致cpu使用率异常飙升,而Log4j2.0基于LMAX Disruptor的异步日志在多线程环境下性能会远远优于Log4j 1.x和logback。

Log4j的使用

添加pom依赖

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.10.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.10.0</version>
        </dependency>

添加log4j2.xml配置文件

  注意了,这里是log4j2.xml而不是log4j.xml,这也是log4j2在配置文件方面与log4j最不同的地方,两者不能混淆,否则会报出找不到配置文件的问题。

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
    <appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %5p %t %-5l - %m%n"/>
        </Console>
        <!--
            fileName:指定日志的所在位置以及日志名称
            filePattern:指定备份的日志所在位置以及名称
        -->
        <RollingFile name="RollingFile" fileName="F:/logs/log4j2-xml.log" filePattern="F:/logs/log4j2-xml-$${date:yyyy-MM}/log4j2-xml-%d{yyyy-MM-dd}-%i.log.gz">
            <!--输出的日志数据格式-->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %5p %t %-5l - %m%n"/>
            <!--设置日志文件大小,当超过5M时,触发日志备份操作-->
            <SizeBasedTriggeringPolicy size="5 MB" />
        </RollingFile>
    </appenders>
    <loggers>
        <root level="trace">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFile"/>
        </root>
    </loggers>
</configuration>

  配置文件中详细的标签我已经在代码备注上填写完整了,所以说这里就直接略过。

添加Log4j2Test测试代码

package com.lyc.log4j2;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;

public class Log4j2Test {

    private static final Logger log = LogManager.getLogger(Log4j2Test.class);

    @Test
    public void test(){
        for(int i = 0;i < 200000;i ++){
            log.info("这里是在控制台中输出的信息。");
        }
    }
}

运行结果

  上述代码的意思是log4j2在运行代码时将日志信息记录在log4j2-xml.log日志文件中,这里我在测试代码中特意执行了200000次,目的就是为了让其生成比较大的日志文件,在log4j2.xml的配置文件中,我们已经将其日志文件的最大上限通过SizeBasedTriggeringPolicy标签限制在了5M,这样,多余的日志信息就会被记录到相应的压缩包中,该压缩包的所在位置以及文件名称由RollingFile标签中的filePattern属性所作出规定,所以说运行后的结果如下所示:

log4j2的简介及基础配置

相关标签: log4j2