一、日志框架的选择
市面上常见的日志框架有很多,它们可以被分为两类:日志门面(日志抽象层)和日志实现,如下表。
日志分类
|
描述
|
举例
|
日志门面(日志抽象层)
|
为 Java 日志访问提供一套标准和规范的 API 框架,其主要意义在于提供接口。
|
JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for Java)、jboss-logging
|
日志实现
|
日志门面的具体的实现
|
Log4j、JUL(java.util.logging)、Log4j2、Logback
|
通常情况下,日志由一个日志门面与一个日志实现组合搭建而成,Spring Boot 选用 SLF4J + Logback 的组合来搭建日志系统。
SLF4J 是目前市面上最流行的日志门面,使用 Slf4j 可以很灵活的使用占位符进行参数占位,简化代码,拥有更好的可读性。Logback 是 Slf4j 的原生实现框架,它与 Log4j 出自一个人之手,但拥有比 log4j 更多的优点、特性和更做强的性能,现在基本都用来代替 log4j 成为主流。
优先级:
TRACE < DEBUG < INFO < WARN < ERROR
二、SLF4J的使用
1、如何在系统中使用SLF4J
以后在开发的时候,日志记录方法的调用,不应该来直接调用日志接口的实现类,而是调用日志抽象层里面的方法
应该给系统里面导入slf4j的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"); } }
三、spring boot的日志关系
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.6.2</version> <scope>compile</scope> </dependency>
spring boot使用他来做日志功能:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> <version>2.6.2</version> <scope>compile</scope> </dependency>
底层依赖关系:

总结:
1)、spring boot底层也是使用SLF4J+logback的方式进行日志记录
2)、spring boot也把其他的日志都替换成了slf4j
3)、中间转换包

4)、如果我们要引入其他框架,一定要把这个框架的默认日志依赖移除掉
四、日志使用
1、默认配置
spring boot已经默认帮我们配置好了日志;
2、修改默认日志配置:
我们可以根据自身的需求,通过全局配置文件(application.properties/yml)修改 Spring Boot 日志级别和显示格式等默认配置。
在 application.properties 中,修改 Spring Boot 日志的默认配置,代码如下。
#日志级别
logging.level.com.atguigu=trace
#使用相对路径的方式设置日志输出的位置(项目根目录目录\my-log\mylog\spring.log)
#logging.file.path=my-log/myLog
#绝对路径方式将日志文件输出到 【项目所在磁盘根目录\springboot\logging\my\spring.log】
logging.file.path=/spring-boot/logging
#控制台日志输出格式
logging.pattern.console=%d{yyyy-MM-dd hh:mm:ss} [%thread] %-5level %logger{50} - %msg%n
#日志文件输出格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} === - %msg%n
5)、输出格式:
我们可以通过以下常用日志参数对日志的输出格式进行修改,如下表。
序号
|
输出格式
|
说明
|
1
|
%d{yyyy-MM-dd HH:mm:ss, SSS}
|
日志生产时间,输出到毫秒的时间
|
2
|
%-5level
|
输出日志级别,-5 表示左对齐并且固定输出 5 个字符,如果不足在右边补 0
|
3
|
%logger 或 %c
|
logger 的名称
|
4
|
%thread 或 %t
|
输出当前线程名称
|
5
|
%p
|
日志输出格式
|
6
|
%message 或 %msg 或 %m
|
日志内容,即 logger.info("message")
|
7
|
%n
|
换行符
|
8
|
%class 或 %C
|
输出 Java 类名
|
9
|
%file 或 %F
|
输出文件名
|
10
|
%L
|
输出错误行号
|
11
|
%method 或 %M
|
输出方法名
|
12
|
%l
|
输出语句所在的行数, 包括类名、方法名、文件名、行数
|
13
|
hostName
|
本地机器名
|
14
|
hostAddress
|
本地 ip 地址
|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南