(二)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
查看日志打印情况是否正确
多次启动项目,发现test.log文件总是会自动清除后重写,修改append=true,重启发现不会再自动清除。
The end.
author:蓝何忠
email:[email protected]