improve logging, now correctly logs the status in result
This commit is contained in:
@@ -23,6 +23,7 @@ public class RequestLoggingInterceptor implements HandlerInterceptor {
|
||||
private static final Logger log = LoggerFactory.getLogger(RequestLoggingInterceptor.class);
|
||||
|
||||
private static final String START_TIME_ATTRIBUTE = "startTime";
|
||||
public static final String BUSINESS_RESULT_ATTRIBUTE = "requestLoggingBusinessResult";
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
|
||||
@@ -97,9 +98,16 @@ public class RequestLoggingInterceptor implements HandlerInterceptor {
|
||||
int status = response.getStatus();
|
||||
String statusText = getStatusText(status);
|
||||
|
||||
BusinessResult businessResult = (BusinessResult) request.getAttribute(BUSINESS_RESULT_ATTRIBUTE);
|
||||
if (businessResult != null) {
|
||||
request.removeAttribute(BUSINESS_RESULT_ATTRIBUTE);
|
||||
}
|
||||
|
||||
if (ex != null) {
|
||||
log.error("Request completed with error: {} {} - {} {} ({}ms) - Exception: {}",
|
||||
method, uri, status, statusText, duration, ex.getMessage());
|
||||
} else if (businessResult != null) {
|
||||
logWithBusinessResult(method, uri, status, statusText, duration, businessResult);
|
||||
} else if (status >= 400) {
|
||||
log.warn("Request completed with error: {} {} - {} {} ({}ms)",
|
||||
method, uri, status, statusText, duration);
|
||||
@@ -196,6 +204,58 @@ public class RequestLoggingInterceptor implements HandlerInterceptor {
|
||||
}
|
||||
}
|
||||
|
||||
private void logWithBusinessResult(String method, String uri, int status, String statusText,
|
||||
long duration, BusinessResult businessResult) {
|
||||
String template = "Request completed: {} {} - {} {} ({}ms) businessCode={} success={} message={}";
|
||||
if (isBusinessError(businessResult)) {
|
||||
log.error(template, method, uri, status, statusText, duration,
|
||||
businessResult.getCode(), businessResult.isSuccess(), businessResult.getMessage());
|
||||
} else if (isBusinessWarn(businessResult)) {
|
||||
log.warn(template, method, uri, status, statusText, duration,
|
||||
businessResult.getCode(), businessResult.isSuccess(), businessResult.getMessage());
|
||||
} else {
|
||||
log.info(template, method, uri, status, statusText, duration,
|
||||
businessResult.getCode(), businessResult.isSuccess(), businessResult.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isBusinessError(BusinessResult businessResult) {
|
||||
Integer code = businessResult.getCode();
|
||||
return code != null && code >= 500;
|
||||
}
|
||||
|
||||
private boolean isBusinessWarn(BusinessResult businessResult) {
|
||||
Integer code = businessResult.getCode();
|
||||
if (code != null) {
|
||||
return code >= 400;
|
||||
}
|
||||
return !businessResult.isSuccess();
|
||||
}
|
||||
|
||||
public static final class BusinessResult {
|
||||
private final boolean success;
|
||||
private final Integer code;
|
||||
private final String message;
|
||||
|
||||
public BusinessResult(boolean success, Integer code, String message) {
|
||||
this.success = success;
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public boolean isSuccess() {
|
||||
return success;
|
||||
}
|
||||
|
||||
public Integer getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否为安全的请求头(不包含敏感信息)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user