Spring Boot学习笔记-3
一、日志
1.常见日志框架
日志门面(抽象层/接口层):
JCL
,SLF4j
,jboss-logging
日志实现:Log4j
,Log4j2
,JUL
,Logback
推荐使用SLF4j + Logback
2.SLF4j
日志记录应调用日志抽象层(SLF4j)内方法
给系统导入SLF4j的jar和Logback的实现jar
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
日志实现框架有自己的配置文件,使用SLF4j后配置文件是对实现框架进行配置
3.统一日志框架(SLF4j+Logback)
- 将其它日志框架排除
- 通过包装层相应jar包替换原本日志框架jar
- 导入SLF4j实现框架(logback)
项目依赖树:
将其它日志转为SLF4j:
最终使用slf4j+logback进行日志记录
//中间转换包
//jul-to-slf4j-1.7.30.jar/bridge/SLF4JBridgeHandler
public static void install() {
LogManager.getLogManager().getLogger("").addHandler(new SLF4JBridgeHandler());
}
如果引入其它框架一定要将其默认日志依赖移除,因为转换包下也有同名包,不移除会导致识别错误,移除后Spring Boot即可适配
4.日志使用
//记录器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
void contextLoads() {
//日志级别(由低到高)
//可以调整输出日志级别,只打印相同及更高级别日志(默认级别为info级别)
logger.trace("trace日志:");
logger.debug("debug日志:");
logger.info("info日志:");
logger.warn("warn日志:");
logger.error("error日志:");
}
//调整日志级别(level后接调整范围)
logging.level.com.springbootdemo.demo1 = trace
//输出到指定路径
logging.file.name=C:/Users/12728/Desktop/springboot.log
//在当前磁盘下创建路径保存(文件名默认为spring.log)
logging.file.path=/springboot/log
//指定日志输出格式(控制台)
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
//指定日志输出格式(文件中)
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} === %msg%n
/*
日志输出格式:
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
*/
5.指定配置
在类路径下(resources)添加每个框架自己的配置文件(指定文件名),即可替代默认配置
Logging System | Customization |
---|---|
Logback | logback-spring.xml ,logback-spring.groovy ,logback.xml ,logback.groovy |
Log4j2 | log4j2-spring.xml ,log4j2.xml |
Java Util Logging | logging.properties |
logback.xml:直接被日志框架识别
logback-spring.xml:日志框架不直接加载日志配置项,而是由SpringBoot解析日志配置,可以使用SpringBoot的Profile功能(相关配置只在对应环境下生效)
<layout class="ch.qos.logback.classic.PatternLayout">
<springProfile name="dev">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ----> %-5level %logger{50} - %msg%n</pattern>
</springProfile>
<springProfile name="!dev">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ===== [%thread] ===== %-5level %logger{50} - %msg%n</pattern>
</springProfile>
</layout>
//application.properties
//激活dev环境
spring.profiles.active=dev