springboot日志配置
springboot 默认集成了 slf4j为日志门面 以logback为日志实现
slf4j 和logback
1.使用logback时无需导入maven坐标
2.可在application.properties中配置日志信息
#导入了别的实现后就不用配置了,配了也会失效
#指定自定义logger对象的日志级别
logging.level.cn.sp=trace
#指定控制台输出日志的格式
logging.pattern.console=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread]==== %msg %n
#指定目录
logging.file.path=D:/logs
#指定文件路径
logging.file.name=springbootlog.log
#指定文件日志格式
logging.pattern.file=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread]==== %msg %n
4.配置logback.xml,也可配置为logback-spring.xml,也能被springboot解析,后面的可配置dev的pro等参数在application.properties中
设置spring.profiles.active=pro
当加入配置文件后,application.properties中配置的日志信息就会失效
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<property name="patternDev" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"></property>
<property name="patternPro" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}XXXX - %msg%n"></property>
<!-- 定义log文件存放目录 -->
<property name="log_dir" value="/logs"/>
<!-- 输出到控制台 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 控制输出流对象 System.out 改为System.err-->
<target>System.err</target>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 当文件名为logback-spring.xml时,由SpringBoot框架来解析 -->
<springProfile name="dev">
<pattern>${patternDev}</pattern>
</springProfile>
<springProfile name="pro">
<pattern>${patternPro}</pattern>
</springProfile>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 自定义logger 对象是否继承rootlogger-->
<logger level="debug" name="cn.sp" additivity="false">
<appender-ref ref="console"/>
</logger>
</configuration>
5.测试
使用slf4j或者log4j2作为日志门面,logback作为日志实现
import org.apache.logging.log4j.LogManager;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootLogApplicationTests {
public static final Logger log = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);
@Test
void contextLoads() {
log.error("error");
log.warn("warn");
log.info("info");
log.debug("debug");
log.trace("trace");
//使用log4j2 使用slf4j门面和logback日志实现
org.apache.logging.log4j.Logger logger = LogManager.getLogger(SpringbootLogApplicationTests.class);
logger.info("log4j2 info");
}
}
使用log4j2作为日志实现
1.导入maven坐标
此时需要排除logback的日志实现
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!-- 排除logback日志实现 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 导入log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
2.配置log4j2.xml,详细参考log4j2模块
<?xml version="1.0" encoding="UTF-8"?>
<!-- 框架默认级别为warn 自动加载配置文件的间隔时间,不低于5s,修改配置文件后无需重新发动应用,可以自动加载-->
<configuration status="debug" monitorInterval="5">
<properties>
<property name="LOG_HOME">D:/logs</property>
</properties>
<!--先定义所有的appender -->
<appenders>
<!--这个输出控制台的配置 -->
<Console name="Console" target="SYSTEM_ERR">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 日志的格式 -->
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
<loggers>
<root level="trace">
<!-- <appender-ref ref="Async"/> -->
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
3.测试