IIWAB springboot项目404接口打印request header - IIWAB

springboot项目404接口打印request header

IIWAB 1年前 ⋅ 772 阅读

2.1.X版本,利用DefaultErrorAttributes,DefaultErrorAttributes实现ErrorAttributes

ErrorAttributes:Provides access to error attributes which can be logged or presented to the user.

@Slf4j
public class IiwabDefaultErrorAttributes extends DefaultErrorAttributes {
    @Override
    public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
        String requestUri = this.getAttr(webRequest, "javax.servlet.error.request_uri");
        Integer status = this.getAttr(webRequest, "javax.servlet.error.status_code");
        Throwable error = getError(webRequest);
        R result;
        Iterator<String> headerNames = webRequest.getHeaderNames();
        StringBuilder sb = new StringBuilder();
        List<Object> logArgs = new ArrayList();
        sb.append("\n\n================  Request Start  ================\n");
        while (headerNames.hasNext()) {
            String next = headerNames.next();
            String header = webRequest.getHeader(next);
            sb.append("===headers===  {} : {}\n");
            logArgs.add(next);
            logArgs.add(header);
        }
        if (error == null) {
            sb.append("URL:{} error status:{}");
            logArgs.add(requestUri);
            logArgs.add(status);
            result = R.fail(ResultCode.INTERFACE_INNER_INVOKE_ERROR, "系统未知异常[HttpStatus]:" + status);
        } else {
            log.error(String.format("URL:%s error status:%d", requestUri, status), error);
            result = R.fail(status, error.getMessage());
        }
        sb.append("\n================   Request End   ================\n");
        log.error(sb.toString(),logArgs.toArray());
        return BeanUtil.toMap(result);
    }

    @Nullable
    private <T> T getAttr(WebRequest webRequest, String name) {
        return (T) webRequest.getAttribute(name, RequestAttributes.SCOPE_REQUEST);
    }
}

添加bean

    @Bean
    @ConditionalOnMissingBean(value = ErrorAttributes.class, search = SearchStrategy.CURRENT)
    public DefaultErrorAttributes errorAttributes() {
        return new IiwabDefaultErrorAttributes();
    }

全部评论: 0

    我有话说: