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();
}
注意:本文归作者所有,未经作者允许,不得转载