目录
默认日志框架
日志配置
更换日志框架
排除默认Logback
引入目标日志框架
添加配置文件
logback.xml
SpringBoot的核心设计宗旨是约定大于配置,很多框架功能都给你默认加载和配置完成供你使用,但这就要求使用者对框架有一定的理解和改造能力,比如这个日志框架,是其他框架的基础,需要默认指定日志框架,但如果想要深入了解日志框架内容是很多的,比如logback 和 log4j 都是基于 SLF4J(Simple Logging Facade for Java) 的门面(Facade)设计模式进行集成的。
- logback是 SLF4J 的原生实现框架,由 SLF4J 的作者设计,与 SLF4J 无缝集成,是SLF4J 的“亲儿子”,集成更紧密;
- log4j 不是原生支持 SLF4J,需要通过 桥接器(Bridge) 实现适配
默认日志框架
Spring Boot 默认使用Logback作为日志框架,通过spring-boot-starter-logging
实现自动配置。该依赖会被其他Starter(如spring-boot-starter-web
)隐式引入。
若未在application.yml
或application.properties
中配置日志,Spring Boot会使用以下默认值:
-
日志级别:Root日志级别默认为
INFO
。 -
输出目标:日志仅输出到控制台(不写入文件)。
-
格式:
-
时间戳 | 日志级别 | 进程ID | 线程名 | Logger名称 | 日志消息 示例: 2023-10-05 14:30:00.123 INFO 12345 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080
日志配置
application.yml中的常用配置:
logging:file:name: app.log # 日志文件名(默认生成在项目根目录)path: /var/log # 日志目录(与`file.name`二选一)level:root: INFO # Root日志级别org.springframework.web: DEBUG # 指定包日志级别pattern:console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n"file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n"
若需详细的springboot启动日志(如Bean加载过程),可通过以下方式配置:
方式1:通过启动参数
在启动命令中添加--debug参数,仅打印Spring Boot核心调试日志:
java -jar your-app.jar --debug方式2:全局DEBUG日志
在application.yml中设置Root日志级别为DEBUG:
logging:level:root: DEBUG方式3:特定包日志
若仅需查看Spring容器的初始化日志:
logging:level:org.springframework.boot: DEBUGorg.springframework.context: DEBUG
更换日志框架
Spring Boot支持快速切换至其他日志框架(如Log4j2),需以下步骤:
排除默认Logback
在Maven的pom.xml
中排除spring-boot-starter-logging
:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency>
引入目标日志框架
以Log4j2为例,添加对应Starter:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
添加配置文件
在src/main/resources
目录下创建日志配置文件:
-
Log4j2:
log4j2.xml
或log4j2-spring.xml
-
示例配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/></Console></Appenders><Loggers><Root level="info"><AppenderRef ref="Console"/></Root></Loggers>
</Configuration>
logback.xml
Spring Boot 默认在 classpath 下查找 logback.xml
,如果存在,会直接使用它作为 Logback 的配置,logback.xml
的优先级 高于 Spring Boot 的默认日志配置(如 application.yml
中的 logging
配置项),如果同时存在 logback.xml
和 application.yml
中的日志配置,logback.xml
的配置会覆盖 application.yml
。
如果希望完全由 logback.xml
控制日志行为,可以在 application.yml
中禁用 Spring Boot 的默认日志配置:logging: config: none # 禁用所有默认日志配置
在 src/main/resources
目录下新建 logback.xml
,例如:
<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 定义控制台输出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!-- 定义文件输出 --><appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>app.log</file><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!-- Root 日志级别 --><root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/></root><!-- 特定包的日志级别 --><logger name="org.springframework.web" level="DEBUG"/>
</configuration>
虽然 logback.xml
会被自动加载,但 Spring Boot 官方推荐使用 logback-spring.xml
,原因如下:
配置文件 | 特点 |
---|---|
logback.xml | 直接由 Logback 加载,无法使用 Spring Boot 的增强功能(如 Profile 多环境支持)。 |
logback-spring.xml | 由 Spring Boot 加载,支持 Profile 条件化配置(如 <springProfile> 标签)。 |
<configuration><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!-- 开发环境:输出 DEBUG 级别到控制台 --><springProfile name="dev"><root level="DEBUG"><appender-ref ref="CONSOLE"/></root></springProfile><!-- 生产环境:输出 INFO 级别到文件 --><springProfile name="prod"><root level="INFO"><appender-ref ref="FILE"/></root></springProfile>
</configuration>