SLF4J
Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每种Logger都可以通过配置使用控制台或者文件输出日志内容。
SLF4J——Simple Logging Facade For Java,它是一个针对于各类Java日志框架的统一Facade抽象。Java日志框架众多——常用的有java.util.logging
, log4j
, logback
,commons-logging
, Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定义了统一的日志抽象接口,而真正的日志实现则是在运行时决定的——它提供了各类日志框架的binding。
Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。
默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在运行应用程序和其他例子时,启动项目输出的日志文件就是。
日志输出内容元素具体如下:
时间日期:精确到毫秒
日志级别:ERROR, WARN, INFO, DEBUG or TRACE
进程ID
分隔符:
---
标识实际日志的开始线程名:方括号括起来(可能会截断控制台输出)
Logger名:通常使用源代码的类名
日志内容
日志框架的使用
1.默认配置
Spring Boot为我们提供了很多默认的日志配置,所以,只要将spring-boot-starter-logging作为依赖加入到当前应用中即可。
2.控制台输出顺序
日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。
Spring Boot中默认配置ERROR
、WARN
和INFO
级别的日志输出到控制台。还可以通过启动您的应用程序–debug标志来启用。
1 @Slf4j 2 @SpringBootApplication 3 public class Test01Application { 4 5 6 public void index(){ 7 8 //日志的级别; 9 //由低到高 trace<debug<info<warn<error10 //可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效11 //SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别12 log.trace("");13 log.debug("测试信息");14 log.info("普通信息");15 log.warn("警告进行");16 log.error("错误信息");17 18 }19 20 21 public static void main(String[] args) {22 SpringApplication.run(Test01Application.class, args);23 }24 }
3.级别控制
所有支持的日志记录系统都可以在Spring环境中设置记录级别(在application.properties中)
格式为:’logging.level.* = LEVEL’
logging.level
:日志级别控制前缀,*
为包名或Logger名LEVEL
:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
如果想要在修改日志级别,可以直接在配置文件中设置。
logging.level.com.test=trace #logging.path=# 不指定路径在当前项目下生成springboot.log日志 # 可以指定完整的路径; #logging.file=G:/springboot.log # 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件 logging.path=/spring/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是换行符--> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
4.切换日志框架
slf4j+log4j的方式:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>logback-classic</artifactId> <groupId>ch.qos.logback</groupId> </exclusion> <exclusion> <artifactId>log4j-over-slf4j</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency>
切换为log4j2
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-logging</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>