在 Spring(包括 Spring Boot)里集成 Java 的 java.util.logging(JUL,即 Logger)有几种常见方式,取决于你用的是 Spring Boot 还是 传统 Spring,以及你希望 只用 JUL 还是 统一日志框架。
下面按常见场景给你说明。
java.util.logging.LoggerSpring Boot 默认使用 Logback,但底层会通过 spring-jcl 把日志统一桥接到 SLF4J。
如果你的代码直接写:
import java.util.logging.Logger;
Logger logger = Logger.getLogger("com.example.demo");
logger.info("hello");
✅ 是可以直接用的,但日志最终会被 Spring Boot 的日志系统接管(输出格式由 Spring 控制)。
java.util.logging如果你只想用 JUL,可以在 application.properties 中指定:
logging.config=classpath:logging.properties
并创建 src/main/resources/logging.properties:
handlers=java.util.logging.ConsoleHandler
.level=INFO
java.util.logging.ConsoleHandler.level=INFO
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
⚠️ 不推荐在 Spring Boot 中完全替换为 JUL,因为会失去 Logback 的很多能力。
import java.util.logging.Logger;
import org.springframework.stereotype.Component;
@Component
public class DemoService {
private static final Logger logger =
Logger.getLogger(DemoService.class.getName());
public void test() {
logger.info("Spring + JUL");
}
}
✅ Spring 不限制你用哪种 Logger。
在真实项目中,推荐:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
</dependency>
在 Spring 启动时注册:
import org.slf4j.bridge.SLF4JBridgeHandler;
@Configuration
public class LoggingConfig {
static {
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
}
}
这样 JUL 的日志会自动走 SLF4J。
✅ 推荐结构:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RestController
public class DemoController {
private static final Logger log =
LoggerFactory.getLogger(DemoController.class);
public void test() {
log.info("推荐方式");
}
}
原因:
java.util.logging.Logger?✅ 适合:
❌ 不推荐:
| 场景 | 建议 |
|---|---|
| Spring Boot | 直接用 JUL 可以,但建议 SLF4J |
| 传统 Spring | 可直接用 JUL |
| 企业项目 | SLF4J + Logback |
| 兼容旧 JUL 代码 | jul-to-slf4j 桥接 |
如果你愿意,我可以:
你现在是 Spring Boot 还是普通 Spring?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。