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

Spring Boot如何禁用System.err的额外异常日志输出

解决Tomcat额外输出异常日志的问题

你遇到的额外错误日志并非Log4j2输出,而是Tomcat的StandardWrapperValve组件在处理未捕获异常时,直接通过System.err打印的容器级日志,和应用的Log4j2配置无关。以下是几种可行的解决方法:

方法1:直接禁用Tomcat该组件的日志输出

针对Spring Boot嵌入式Tomcat

在application.properties中添加配置:

# 完全关闭StandardWrapperValve的日志输出
logging.level.org.apache.catalina.core.StandardWrapperValve=OFF

若使用YAML格式(application.yml):

logging:
  level:
    org.apache.catalina.core.StandardWrapperValve: OFF

针对独立部署的Tomcat

修改Tomcat安装目录下conf/logging.properties文件,调整对应配置项:

# 将该组件日志级别设为OFF,停止输出
org.apache.catalina.core.StandardWrapperValve.level = OFF

方法2:全局捕获未处理异常

通过自定义全局异常处理器,拦截所有未处理的异常,避免Tomcat触发默认的错误日志输出。以Spring Boot项目为例:

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public void handleAllExceptions(Exception ex, HttpServletResponse response) throws IOException {
        // 用Log4j2记录异常(已为JSON格式)
        // 返回自定义错误响应,阻止Tomcat输出额外日志
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "服务器内部错误");
    }
}

方法3:重定向System.err到Log4j2(可选)

如果希望将System.err的输出也转为JSON格式,可在应用启动时重定向流:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.io.IoBuilder;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.io.PrintStream;

@SpringBootApplication
public class Application {
    private static final Logger logger = LogManager.getLogger(Application.class);

    public static void main(String[] args) {
        // 重定向System.err到Log4j2,按ERROR级别输出
        PrintStream log4jErr = IoBuilder.forLogger(logger)
                .setLevel(org.apache.logging.log4j.Level.ERROR)
                .buildPrintStream();
        System.setErr(log4jErr);
        
        SpringApplication.run(Application.class, args);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:32:03