(二)SpringBoot配置log4j2输出日志

SpringBoot默认是用logback日志系统进行日志输出的,本教程主要说明SpringBoot如何配置使用log4j2进行日志输出。关于logback、log4j、log4j2 哪个好,哪个效率高这种问题,这里不做讨论。

更多详细的springboot日志配置说明可以访问这个链接:https://www.cnblogs.com/zhangzhen894095789/p/6640808.html

或者访问官网英文页面:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html

 

第一步:

SpringBoot默认使用logback作为日志输出,要配置log4j2需先在pom.xml文件中排除默认log的依赖,并引入SpringBoot log4j2的依赖:

pom.xml:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter</artifactId>
	 <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

 

第二步:

在resources文件夹下创建log4j2的配置文件log4j2-spring.xml,如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration> 
    <appenders> 
    	<!--这个输出控制台的配置-->
        <Console name="Console" target="SYSTEM_OUT"> 
        	<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" /> 
            <!--这个都知道是输出日志的格式-->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
        </Console>
        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
        <File name="log" fileName="D:/app_logs/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
        </File> 
        <!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFile" fileName="D:/app_logs/boot-logging.log" filePattern="D:/app_logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n" />
            <SizeBasedTriggeringPolicy size="50MB" />
        </RollingFile>
    </appenders> 

 	<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers> 
        <root level="info">
            <appender-ref ref="Console" />
            <appender-ref ref="log" />
            <appender-ref ref="RollingFile" />
        </root>
    </loggers>
</configuration>

 

第三步:

编写日志打印测试类TestController.java (怪我总写web太多,总是喜欢用controller测试,不大爱写单元测试)

TestController.java:

package com.lan.BootLogging.controller;
//Logger建议用slf4j
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
	
	//Logger建议用slf4j
	Logger log = LoggerFactory.getLogger(getClass());
	
	@RequestMapping("test")
	public String test(){
		log.debug("debug ****************************");
		log.info("info ****************************");
		log.warn("warn ****************************");
		log.error("error ****************************");
		return "success";
	}
}

重要的事情说3遍:

        在代码中Logger建议用slf4j,不要出现log4j2、log4j、logback的踪迹。

        在代码中Logger建议用slf4j,不要出现log4j2、log4j、logback的踪迹。

        在代码中Logger建议用slf4j,不要出现log4j2、log4j、logback的踪迹。

 

最后启动项目测试:http://127.0.0.1:8080/test

查看日志打印情况是否正确

(二)SpringBoot配置log4j2输出日志

多次启动项目,发现test.log文件总是会自动清除后重写,修改append=true,重启发现不会再自动清除。

The end.

 

author:蓝何忠

email:[email protected]