日志记录 (Logging)
Spring MVC 的日志设计旨在简洁、直观且对开发者友好。它在不同级别提供了不同深度的信息。
日志级别
- DEBUG 级别:设计理念是“紧凑且人性化”。它只关注那些具有高复用价值的信息,避免在调试特定问题之外产生过多的干扰信息。
- TRACE 级别:遵循与 DEBUG 类似的原则,但可以作为“消防栓”式的信息源,打印每一处细节。TRACE 级别下的日志消息可能会展示比 DEBUG 更详细的数据结构。
敏感信息保护
出于安全考虑,DEBUG 和 TRACE 级别可能会记录敏感信息。因此,Spring MVC 默认会遮掩(Mask)请求参数和 Header。
如果你在开发环境下确实需要查看完整的请求细节,可以通过设置 DispatcherServlet 的 enableLoggingRequestDetails 属性来开启:
java
public class MyInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
// 开启请求详情日志(包括参数和 Header)
registration.setInitParameter("enableLoggingRequestDetails", "true");
}
}kotlin
class MyInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {
override fun customizeRegistration(registration: ServletRegistration.Dynamic) {
registration.setInitParameter("enableLoggingRequestDetails", "true")
}
}补充教学
1. Spring MVC 日志的最佳实践
在生产环境中,建议将 org.springframework.web 的级别设为 INFO,只有在预发布或本地开发时才开启 DEBUG。 过多的 DEBUG 日志不仅会消耗磁盘空间,还可能通过日志文件泄露用户的 Token 或隐私数据。
2. Spring Boot 中的快速设置
如果你使用的是 Spring Boot,可以通过配置文件轻松开启这些细节:
properties
# 开启 Web 层详情日志
spring.mvc.log-request-details=true
# 设置日志级别
logging.level.org.springframework.web=DEBUG3. 如何追踪请求链路?(MDC)
虽然 Spring MVC 提供了请求日志,但在分布式环境下,你通常需要一个 TraceID。 推荐方案:结合 HandlerInterceptor,在 preHandle 中生成一个唯一 ID 并放入 MDC (Mapped Diagnostic Context) 中。
java
MDC.put("traceId", UUID.randomUUID().toString());这样,你的所有日志输出都会带上这个 ID,排查链路问题时效率会提升数倍。