SpringBoot系列之日志log4j2

 后台程序开发及上线时,一般都会用到Log信息打印及Log日志记录,开发时通过Log信息打印可以快速的定位问题所在,帮助我们快捷开发。程序上线后如遇到Bug或错误,此时则需要日志记录来查找发现问题所在。

 Spring Boot 可以集成很多不同的日志系统,其中最常用的Apache Log4j,而Log4j 2是Log4j的升级版本,Log4j 2相对于Log4j 1.x 有了很多显著的改善。所以这篇博客就直接来说说Spring Boot如何集成并配置使用Log4j2.

1.在pom.xml里添加log4j的jar包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 引入Log4j2 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.8</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8</version>
</dependency>
<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.3.6</version>
</dependency>
<!-- 解决slf4j和log4j2冲突-->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.6.2</version>
</dependency>

2.在src/main/resources下新建log4j-spring.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <!-- 日志文件目录和压缩文件目录配置 -->
    <Properties>
        <Property name="fileName">E:\IDEA\spring_log</Property>
        <Property name="fileGz">E:\IDEA\spring_log\7z</Property>
    </Properties>

    <Appenders>
        <!-- 输出控制台日志的配置 -->
        <Console name="console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            <!-- 输出日志的格式 -->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>

        <!-- 打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
        <RollingRandomAccessFile name="rollingInfoFile" fileName="${fileName}/web-info.log" immediateFlush="false"
                                 filePattern="${fileGz}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.web-info.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} [%t] %-5level %logger{36} %L %M - %msg%xEx%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="6" modulate="true" />
                <SizeBasedTriggeringPolicy size="50 MB"/>
            </Policies>
            <Filters>
                <!-- 只记录info级别信息 -->
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
            <DefaultRolloverStrategy max="50"/>
        </RollingRandomAccessFile>

        <!-- 存储所有error信息 -->
        <RollingRandomAccessFile name="rollingErrorFile" fileName="${fileName}/web-error.log" immediateFlush="false"
                                 filePattern="${fileGz}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.web-error.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} [%t] %-5level %logger{36} %L %M - %msg%xEx%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="6" modulate="true" />
                <SizeBasedTriggeringPolicy size="50 MB"/>
            </Policies>
            <Filters>
                <!-- 只记录error级别信息 -->
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
            <DefaultRolloverStrategy max="50"/>
        </RollingRandomAccessFile>

    </Appenders>

    <!-- 全局配置,默认所有的Logger都继承此配置 -->
    <Loggers>
        <Logger name="com.bsh.sfm.speedboat.container.RGCContainer.log" level="INFO"/>
        <!-- AsyncRoot - 需要LMAX Disruptor的支持 -->
        <AsyncRoot level="INFO" additivity="false">
            <AppenderRef ref="console"/>
            <AppenderRef ref="rollingInfoFile"/>
            <AppenderRef ref="rollingErrorFile"/>
        </AsyncRoot>
    </Loggers>
</Configuration>

3.编写Log4j2的辅助类

 在com.example.demo.log下新建Log.java

package com.example.demo.log;

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

/**
 * Created by Administrator on 2017/8/14.
 * 日志记录辅助类
 */
public class Log {
    private static final Logger LOGGER = LogManager.getLogger();

    private Log(){
        /* cannot be instantiated */
        throw new UnsupportedOperationException("cannot be instantiated");
    }
    public static Logger getLogger(){
        return LOGGER;
    }

    public static void t(String msg){
        LOGGER.trace(msg);
    }

    public static void d(String msg) {
        LOGGER.debug(msg);
    }
    public static void i(String msg) {
        LOGGER.info(msg);
    }
    public static void w(String msg) {
        LOGGER.warn(msg);
    }
    public static void e(String msg) {
        LOGGER.error(msg);
    }
}

4.添加测试类

package com.example.demo.log

import com.example.demo.utils.Log;
import org.junit.Test;

/**
 * Created by Administrator on 2017/8/12.
 *
 */
public class Test {

    @Test
    public void testLog(){
        String msg = "Spring Boot系列之Log4j2的配置及使用";
        Log.t(msg);
        Log.d(msg);
        Log.e(msg);
        Log.i(msg);
        Log.w(msg);
    }

}

完成之后会生成log信息存储文件

<Properties>
    <Property name="fileName">E:\IDEA\spring_log</Property>
    <Property name="fileGz">E:\IDEA\spring_log\7z</Property>
</Properties>

这里写图片描述

 日志的Level分级:TRACE < DEBUG < INFO < WARN < ERROR < FATAL。

 因为我的log4j2中的level设置的是INFO级别。所以打印信息中只能看到 INFO 、WARN 、 ERROR 三种级别(FATAL级别的信息没有打印,否则也可以看到)。

版权声明:本文为博主原创文章,未经博主允许不得转载


关注公众号:猿小雷
获取更多文章,第一之间掌握技术。
有问题请在公众号内回复,小雷会一一回答。

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_34638225/article/details/81268359