You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot配置:ERROR级别下如何输出含完整URL的404错误日志?

最优实现方案:捕获404无映射异常并记录ERROR级日志

结合你的需求(当前logging.level.org.springframework.web= ERROR,只想记录无控制器匹配的404请求及完整URL),最精准且无冗余的实现方式是通过开启无映射时抛出异常+全局异常处理器来实现,具体步骤如下:

第一步:配置Spring Boot抛出无映射异常

在application.properties或application.yml中添加以下配置:

# 开启当找不到请求映射时抛出异常
spring.mvc.throw-exception-if-no-handler-found=true
# 可选:如果你的应用不需要静态资源映射,或者希望静态资源的404也被记录,添加这一行;否则请移除,避免影响正常静态资源访问
spring.web.resources.add-mappings=false

第二步:编写全局异常处理器捕获并记录日志

创建一个全局异常处理类,专门捕获NoHandlerFoundException(Spring MVC在无映射时抛出的异常),并在ERROR级别记录包含完整URL的日志:

import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.NoHandlerFoundException;

@RestControllerAdvice
public class Global404ExceptionHandler {

    private static final Logger logger = LoggerFactory.getLogger(Global404ExceptionHandler.class);

    @ExceptionHandler(NoHandlerFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public void handle404NotFound(NoHandlerFoundException ex, HttpServletRequest request) {
        // 记录ERROR级日志,包含完整请求URL、请求方法,还可以根据需要添加客户端IP、请求头等信息
        logger.error("404 Not Found - 请求URL: {}, 请求方法: {}", request.getRequestURL(), request.getMethod(), ex);
    }
}

为什么这是最优方案?

  • 精准控制:只会记录无控制器匹配的404请求日志,不会像直接调低DispatcherServlet日志级别那样输出大量冗余的DEBUG日志。
  • 灵活定制:你可以在日志中添加更多上下文信息(比如客户端IP、请求参数、请求头),方便后续排查问题。
  • 不影响原有日志级别:保持logging.level.org.springframework.web= ERROR的全局设置,仅针对404场景输出ERROR级日志。

备选方案(无代码修改,但有冗余日志)

如果不想编写代码,也可以通过调整日志细粒度级别实现,但会输出DispatcherServlet的其他DEBUG日志:

logging.level.org.springframework.web= ERROR
# 单独将DispatcherServlet的日志级别设为DEBUG,这样会输出它的DEBUG级日志,包括无映射的404记录
logging.level.org.springframework.web.servlet.DispatcherServlet= DEBUG

但这种方案会产生额外的DEBUG日志,所以不推荐作为最优解。

内容的提问来源于stack exchange,提问作者Bizon4ik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:06:58