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

Spring Boot 2.5.4项目执行HTTP重定向时@Slf4j日志未输出问题

问题现象

Spring Boot 2.5.4项目中定义了如下GET接口,当接口触发302重定向逻辑时,代码内所有手动打印的日志都不会写入日志文件,但返回404等错误响应时日志输出完全正常。

接口代码如下:

@GetMapping(value = "/login/{clientId}", produces = {"text/plain"})
public final ResponseEntity<String> login(@PathVariable String clientId,
                                           @RequestParam(required = false) String callbackUrl,
                                           HttpServletRequest httpRequest) {
    log.info("login called, clientId={}, callbackUrl={}", clientId, callbackUrl);

    // 参数校验
    AppProperties.ClientInfo clientInfo = appProperties.getClientInfoById(clientId);
    if (clientInfo == null) {
        log.warn("No ClientInfo found for clientId={}", clientId);
        return new ResponseEntity<>("No ClientInfo found for clientId=" + clientId, HttpStatus.NOT_FOUND);
    }

    String redirectUrl = makeBrokerUrl(appProperties, clientInfo, callbackUrl, httpRequest);
    log.info("Redirect client to {}", redirectUrl);

    HttpHeaders headers = new HttpHeaders();
    headers.setLocation(URI.create(redirectUrl));
    return new ResponseEntity<>(headers, HttpStatus.valueOf(302));
}

log对象由类上标注的@Slf4j注解生成。

已确认测试结果

  • 请求不存在的clientId(如/login/2)时,info级别的请求接入日志、warn级别的错误日志均可正常输出。
  • 请求存在的clientId(如/login/1)触发重定向时,无任何日志输出,问题和重定向逻辑直接相关。
根因分析

按照出现概率从高到低排序:

  1. 前置网关/反向代理直接返回重定向,请求未到后端服务
    这是最高概率的原因。如果Nginx、API网关等前置节点配置了匹配/login/1的重定向规则,请求会直接由前置节点返回302响应,根本不会转发到Spring Boot服务,Controller代码全程不执行,自然不会有日志。你可以通过在Controller方法首行加断点、或者查询前置节点的访问日志确认请求是否到达后端。
  2. 请求命中缓存,未进入Controller逻辑
    如果接口配置了HTTP缓存(比如加了@Cacheable注解、或者全局拦截器对302响应做了缓存),后续同参数请求会直接从缓存返回,不会执行Controller代码,也就不会打印日志。你可以清理缓存后重新测试,或者给请求加随机参数排除缓存影响。
  3. 全局拦截器/过滤器提前返回重定向
    如果项目中配置了全局拦截器、过滤器,在请求进入Controller之前做了校验逻辑,符合条件的请求直接被返回302重定向,也会导致Controller代码不执行。你可以在拦截器/过滤器的前置处理逻辑中加日志排查。
  4. 异步日志缓冲区未刷盘
    如果你的日志框架配置了异步输出,且缓冲区设置较大,重定向场景下请求结束后缓冲区没有立刻刷入磁盘,会导致日志延迟显示。你可以临时切换为同步日志配置测试,或者等待一段时间后再查询日志文件。
排查步骤
  1. 先在Controller方法首行加断点,发起重定向场景的请求,确认是否真的进入了方法。如果断点未触发,直接排查前置网关、拦截器、缓存逻辑。
  2. 如果断点正常触发,在日志打印行加断点,确认log对象正常、对应类的日志级别为info。
  3. 临时修改日志配置为同步输出,测试重定向场景是否有日志,排除异步缓冲区的问题。

内容的提问来源于stack exchange,提问作者Peter Sone Koldkjær

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:00:02