SLF4J作为日志门面,logback作为日志实现来记录日志。
1、 SpringBoot中的日志设计
依赖
<dependency>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</dependency>
1.1新建spring initalizr,加入spring web依赖
1.2查看依赖关系图
结论:
(1). springboot 底层默认使用logback作为日志实现。
(2). 使用了SLF4J作为日志门面。
(3). 将JUL也转换成slf4j 。
(4). 也可以使用log4j2作为日志门面,但是终也是通过slf4j调用logback。
2、 SpringBoot日志使用
2.1. 在springboot中测试打印日志
代码
class SpringbootLogApplicationTests {
//声明日志记录器 org.slf4j.Logger;
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日志实现
//log4j2日志实现 使用桥接器切换为slf4j的门面和logback的日志实现
org.apache.logging.log4j.Logger logger = LogManager.getLogger(SpringbootLogApplicationTests.class);
logger.info("log4j2的info"); //输出日志消息格式和上面一样,说明桥接成功
测试
2.2. 修改默认日志配置
#1、指定自定义 Logger 对象日志级别
logging.level.com.example = trace
#2、指定控制台输出消息的格式
logging.pattern.console=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] ====== %m%n
#3、指定存放日志文件的具体路径
#logging.file=E:/code/maven/springboot_log/logs/springboot.log
#3.1、指定存放日志文件的目录,默认的文件名spring.log
logging.file.path=E:/code/maven/springboot_log/logs/
#4、指定日志文件消息格式
logging.pattern.file=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] ====== %m%n
测试
2.3. 指定配置
给类路径下放上每个日志框架自己的配置文件;SpringBoot就不使用默认配置的了。
日志框架 | 配置文件 |
Logback | logback-spring.xml , logback.xml |
Log4j2 | log4j2-spring.xml , log4j2.xml |
JUL | logging.propertie |
以logback日志实现为例
logback.xml
<?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>
<!--2、控制台输出日志appender-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--2.1、控制输出流对象,默认的是System.out。改为System.err-->
<target>System.err</target>
<!--2.2、日志消息格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!--9自定义logger对象
additivity="false" 自定义logger对象是否继承rootLogger false不继承
-->
<logger name="com.example" level="info" additivity="false">
<appender-ref ref="console"/>
</logger>
<!--使用这个之后,springboot的配置就会作废-->
</configuration>
注意:使用指定配置之后,springboot的配置就会作废
2.4 logback-spring.xml 和 logback.xml的区别
logback-spring.xml:由SpringBoot解析日志配置
logback-spring.xml:
<?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>
<!--2、控制台输出日志appender-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--2.1、控制输出流对象,默认的是System.out。改为System.err-->
<target>System.err</target>
<!--2.2、日志消格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- <pattern>${pattern}</pattern>-->
<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>
<!--9自定义logger对象
additivity="false" 自定义logger对象是否继承rootLogger false不继承
-->
<logger name="com.example" level="info" additivity="false">
<appender-ref ref="console"/>
</logger>
<!--使用这个之后,springboot的配置就会作废-->
</configuration>
application.properties:
#指定项目使用的具体环境:开发环境/生产环境
spring.profiles.active = dev
测试
2.5. 将日志切换为log4j2
2.5.1将springboot中的默认logback排除
进入maven关系图,找到spring-boot-starter-logging
依赖会变成
2.5.2添加log4j2依赖,也可加上log4j2的配置文件【log4j2.xml】
<!--使用log4j2的日志启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- status="warn"日志框架本身的输出日志级别
monitorInterval="5"自动加载配置文件的时间间隔不低于5s
-->
<Configuration status="debug" monitorInterval="5">
<!--日志处理器-->
<Appenders>
<!--控制台输出appender target="SYSTEM_OUT"-->
<Console name="Console" target="SYSTEM_ERR">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] ==== %m %n" />
</Console>
</Appenders>
<!--logger的定义-->
<Loggers>
<!--使用RootLogger配置,日志级别是trace-->
<Root level="trace">
<!--指定日志使用的处理器-->
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
测试
参考资料:黑马程序员【日志技术】