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

如何配置Spring MVC避免异常日志输出到JBoss的server.log?

解决方案

问题根源

你看到的server.log中的日志是Undertow服务器请求处理组件输出的,并非Spring MVC直接输出。当控制器抛出的异常未被Spring完全处理时,Undertow的请求处理器会捕获该异常并记录到server.log,而非应用指定的日志文件。

解决步骤

1. 通过Spring全局异常处理器捕获所有控制器异常

使用Spring的@ControllerAdvice实现全局异常处理,确保控制器抛出的异常被Spring完全处理,避免Undertow捕获并记录到server.log。

创建全局异常处理器类:

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

import javax.naming.NameNotFoundException;

@ControllerAdvice
public class GlobalExceptionHandler {

    // 处理JNDI查找异常
    @ExceptionHandler(NameNotFoundException.class)
    public ModelAndView handleJndiLookupError(Exception ex) {
        ModelAndView mv = new ModelAndView("errorPage");
        mv.addObject("exception", ex);
        // 使用Log4J 1.2 API记录异常,会自动应用你的日志配置
        org.apache.log4j.Logger.getLogger(this.getClass()).error("JNDI数据源查找失败", ex);
        return mv;
    }

    // 处理所有未捕获的异常
    @ExceptionHandler(Throwable.class)
    public ModelAndView handleAllUncaughtErrors(Exception ex) {
        ModelAndView mv = new ModelAndView("errorPage");
        mv.addObject("exception", ex);
        org.apache.log4j.Logger.getLogger(this.getClass()).error("未处理的系统异常", ex);
        return mv;
    }
}

2. 调整WildFly/JBoss日志配置(可选)

如果仍希望Undertow的请求异常记录到应用日志文件而非server.log,可以在你的MyLoggingProfile中配置io.undertow.request日志类别,将其绑定到应用日志的文件处理器:

在服务器的配置文件(如standalone.xml)中找到MyLoggingProfile节点,添加以下配置:

<logger category="io.undertow.request">
    <level name="ERROR"/>
    <handlers>
        <!-- 替换为你应用日志对应的处理器名称 -->
        <handler name="MY_APP_FILE_HANDLER"/>
    </handlers>
</logger>

3. 验证配置生效

  • 确保META-INF/MANIFEST.MF中的Logging-Profile: MyLoggingProfile配置正确,应用部署时已加载指定的日志配置。
  • 重新部署应用后调用/callKO,检查异常是否只出现在应用日志文件中,server.log不再输出该异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:10:56