WebLogic中Jersey REST服务的WebApplicationException日志消息异常求助
解决WebLogic中Jersey REST服务WebApplicationException日志不显示的问题
我之前在WebLogic上部署Jersey服务时也碰到过一模一样的问题——客户端能正常拿到JSON格式的错误响应,但WebLogic日志里就是看不到异常的详细信息。给你几个亲测有效的解决办法:
1. 抛出异常前手动记录日志
WebLogic默认不会自动把WebApplicationException的详细信息写入日志,最简单的办法就是在抛出异常前,先用日志工具把错误信息打出来。不管你用的是WebLogic自带的Logger还是SLF4J这类第三方日志框架都可以:
import java.util.logging.Logger; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.WebApplicationException; // 获取WebLogger实例 private static final Logger logger = Logger.getLogger(YourServiceClass.class.getName()); public void yourServiceMethod() { try { // 你的业务逻辑 } catch (Exception e) { // 先把异常信息写入WebLogic日志 logger.severe(String.format("服务处理失败: %s", e.getMessage())); logger.severe("异常栈信息:", e); // 再抛出WebApplicationException给客户端 throw new WebApplicationException(Response.status(Response.Status.INTERNAL_SERVER_ERROR) .entity(new ApplicationException(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e.getMessage())) .type(MediaType.APPLICATION_JSON) .build()); } }
这样WebLogic的日志里就会同时显示错误消息和完整的异常栈,方便排查问题。
2. 自定义ExceptionMapper统一处理日志
如果你的服务里有很多地方会抛出这类异常,手动加日志太繁琐,可以自定义一个ExceptionMapper来全局捕获WebApplicationException,在处理响应的同时记录日志:
import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import javax.ws.rs.ext.ExceptionMapper; import javax.ws.rs.ext.Provider; import java.util.logging.Logger; @Provider public class WebAppExceptionMapper implements ExceptionMapper<WebApplicationException> { private static final Logger logger = Logger.getLogger(WebAppExceptionMapper.class.getName()); @Override public Response toResponse(WebApplicationException exception) { // 记录异常信息到WebLogic日志 logger.severe("捕获到WebApplicationException: " + exception.getMessage()); logger.severe("异常详情:", exception); // 返回原响应,保证客户端能拿到正确的JSON return exception.getResponse(); } }
记得把这个类注册到Jersey的资源配置里,这样所有的WebApplicationException都会经过这个处理器,自动完成日志记录。
3. 调整WebLogic的日志配置
有时候WebLogic的默认日志级别会过滤掉Jersey相关的异常日志,你可以通过控制台调整日志记录器的级别:
- 登录WebLogic控制台,进入「环境」→「服务器」→ 选择你的目标服务器
- 切换到「日志」标签页,点击「日志记录」→「高级」
- 在「日志记录器」区域,点击「添加」,输入Jersey相关的包名(比如
org.glassfish.jersey或者com.sun.jersey,根据你用的Jersey版本而定),把日志级别设为ERROR或者DEBUG - 保存配置并重启服务器,这样WebLogic就会输出Jersey相关的异常日志了
注意事项
- 确保你的
ApplicationException类有正确的getter方法,能被Jersey的JSON序列化器正常处理 - 如果使用第三方日志框架(比如Logback),要确保它和WebLogic的日志系统集成正常,避免日志丢失
内容的提问来源于stack exchange,提问作者YerivanLazerev
相关产品推荐
相关产品推荐

