springboot 默认就是使用SLF4J作为日志门面,logback作为日志实现来记录日志的
文章目录
- 1. SpringBoot 中的日志设计
- 2. SpringBoot 日志使用
1. SpringBoot 中的日志设计
- springboot中的日志
<dependency>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</dependency>
- 依赖关系图:
总结:
- springboot 底层默认使用 logback 作为日志实现
- 使用了 SLF4J 作为日志门面
- 将 JUL 也转换成 slf4j
- 也可以使用 log4j2 作为日志门面,但是最终也是通过slf4j 调用 logback
2. SpringBoot 日志使用
- 在 SpringBoot 中测试打印日志
@SpringBootTest
class SpringbootLogApplicationTests {
public static final Logger LOGGER = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);
@Test
void contextLoads() {
// 打印日志信息
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info"); //默认日志级别
LOGGER.debug("debug");
LOGGER.trace("trace");
// log4j 使用桥接器切换为 slf4j 门面 和 logback 日志实现
org.apache.logging.log4j.Logger logger = LogManager.getLogger(SpringbootLogApplicationTests.class);
logger.info("log4j2 info");
}
}
- 修改默认的日志配置
logging.file.path 和 logging.file.name 的区别:
- logging.file.path:可以指定日志文件的路径,而不能指定名字,最后输出的文件名字默认为 spring.log
- logging.file.name:可以指定日志文件的路径与名称,最后日志会输出到你命名的文件中
配置文件中二者同时存在不能同时生效,在配置了两者的情况下,以 logging.file.name 的配置为准
# 指定自定义 logger 对象日志级别
logging.level.com.xdr630=trace
# 指定控制台输出消息的格式
logging.pattern.console=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] %msg %n
# 指定日志文件存放的目录,不能指定文件名,默认的文件名为 spring.log
#logging.file.path=E:/logs
# 指定日志文件存放的路径和文件名
logging.file.name=E:/logs/xdr.log
# 指定日志文件的消息格式
logging.pattern.file=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] %msg %n
- 指定配置
- 给类路径下放上每个日志框架自己的配置文件,SpringBoot 就不使用默认的配置了
日志框架 | 日志框架 |
Logback | logback-spring.xml , logback.xml |
Log4j2 | log4j2-spring.xml , log4j2.xml |
JUL | logging.properties |
- 使用SpringBoot解析日志配置
- logback-spring.xml:由SpringBoot解析日志配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread --- %m %n"></property>
<!--控制台日志输出的 appender-->
<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">
<springProfile name="dev">
<pattern>${pattern}</pattern>
</springProfile>
<springProfile name="pro">
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread - %m %n</pattern>
</springProfile>
</encoder>
</appender>
<!--自定义 logger 对象,additivity="false" 自定义logger对象是否继承 root logger-->
<logger name="com.xdr630" level="info" additivity="false">
<appender-ref ref="console"></appender-ref>
</logger>
</configuration>
- application.properties
# 指定项目使用的具体环境
spring.profiles.active=dev
5、将日志切换为 log4j2
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!--排除logback-->
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!--使用 log4j2 的日志启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
- 再添加对应的 log4j-spring.xml 配置文件即可