首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring中非常长的异常日志

Spring中非常长的异常日志
EN

Stack Overflow用户
提问于 2016-11-02 04:40:44
回答 1查看 280关注 0票数 2

有人考虑过如何处理日志中的超长异常吗?这将成为Spring的一大难题,因为在业务流程的基础上有很多自动生成的东西和抽象。

例如,如果我有一个模型类,并通过@RepositoryRestResource + CrudRepository公开它,并在运行时按下@NonNull或唯一约束,我将得到一个超长例外。认为应该有某种方法来拦截它们,在容器范围内实现一些更好的定制日志记录,或者可能有一些已经准备好使用的解决方案。谢谢您的建议

PS。有一个相似问题,但建议的解决方案似乎与现代log4j-2版本无关。

EN

回答 1

Stack Overflow用户

发布于 2016-11-02 06:35:58

我想出的一个解决方案是针对来自Spring控制器的异常,这对于很多场景来说都足够了。

代码语言:javascript
复制
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler
{
    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    @ExceptionHandler({RollbackException.class, DataIntegrityViolationException.class})
    public @ResponseBody
    Map<String,Object> allRollbacks
    (
        Exception exception,
        HttpServletRequest request,
        HttpServletResponse response
    )
    {
        HashMap<String, Object> result = new HashMap<>();
        result.put("error", HttpStatus.BAD_REQUEST.name());

        Throwable exceptionToLog = Throwables.getRootCause(exception);
        String exceptionClassName = exceptionToLog.getClass().getCanonicalName();
        String message = exceptionToLog.getMessage();

        log.info("{}: {}", exceptionClassName, message);

        result.put("exception", exceptionClassName);
        result.put("message", message);

        return result;
    }
}

在本例中,我们将在来自拦截器的日志中看到一个简短的根原因消息,客户端将收到这样的JSON响应:

代码语言:javascript
复制
{
 "exception": "org.postgresql.util.PSQLException",
 "error": "BAD_REQUEST",
 "message": "ERROR: duplicate key value violates unique constraint \"ukr6y7o33kjy3vispmnl7if5d4s\"\n  Detail: Key (ref1_id, ref2_id, ref3_id)=(8325842b-ee40-48c3-ab6b-5b914e70b583, 9b0f5356-baa8-4ae2-a149-4f7b1f2dbfda, 9281369c-10a6-4649-bcd3-c18d2e5cd287) already exists."
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40372608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档