SLF4J是日志门面,不实现输出,需绑定Logback或Log4j2等具体实现;项目中只能存在一个绑定,否则报Multiple bindings错误;Spring Boot默认集成Logback,可通过application.yml快速配置基础日志,复杂需求需用logback-spring.xml或log4j2.xml定制;代码统一使用SLF4J API,推荐参数化日志以提升性能。

SLF4J 本身不负责日志输出,它只是统一的日志接口层。真正配置日志行为(如输出位置、格式、级别、多文件分流等)必须依赖底层绑定实现,比如 Logback(Spring Boot 默认)或 Log4j2(高性能可选)。配置的关键在于:选对绑定、配好实现框架、用标准 SLF4J API 写代码。
确认并引入正确的绑定依赖
项目中只能存在一个 SLF4J 绑定实现,否则启动会报 Multiple bindings 错误。常见组合如下:
-
Spring Boot 项目(推荐默认):无需额外添加依赖,
spring-boot-starter-logging已内置slf4j-api+logback-classic -
想换 Log4j2:需排除默认 logging,显式引入
log4j-slf4j-impl和log4j-core -
纯 Java 项目:手动添加
slf4j-api+ 且仅一个实现(如logback-classic或slf4j-simple)
通过 application.yml / properties 快速配置(适合简单场景)
Spring Boot 支持零 XML 配置,直接在 application.yml 中设置:
logging:
level:
root: info
com.example.myapp.service: debug
org.springframework.web: warn
file:
name: logs/app.log
pattern:
console: "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"
file: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"注意:该方式仅支持基础控制台+单文件、全局级别和简单格式;不支持按包/Marker 分流、异步写入、滚动策略高级定制。
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
使用 logback.xml 或 log4j2.xml 进行完整控制(推荐复杂需求)
当需要多输出、条件路由、自定义 Appender 或性能调优时,必须用原生配置文件:
-
Logback:在
src/main/resources下放logback-spring.xml(支持 Spring Profile) -
Log4j2:放
log4j2.xml,需确保 classpath 中无其他日志绑定冲突
例如,Log4j2 实现控制台 + 主日志 + 错误专用文件三路输出,只需在 <appenders></appenders> 定义三个 Appender,在 <loggers></loggers> 中为 Root 或指定 Logger 引用对应 <appenderref></appenderref> 即可。
代码中统一使用 SLF4J API
无论底层是 Logback 还是 Log4j2,业务代码始终不变:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
<p>public class UserService {
private static final Logger log = LoggerFactory.getLogger(UserService.class);</p><pre class="brush:php;toolbar:false;">public void createUser() {
log.debug("Creating user with id: {}", userId); // 参数化,避免字符串拼接
log.info("User created successfully");
log.error("Failed to create user", exception);
}}
关键点:用 LoggerFactory.getLogger(类名.class) 获取实例;优先用带占位符的 log.debug("msg {}", arg),SLF4J 会在日志被禁用时跳过参数计算,提升性能。

















