优化:基于阿里巴巴 Java 开发手册(黄山版)优化 ThreadLocal 使用
1.编程规约>并发处理>第6条: 【强制】必须回收自定义的 ThreadLocal 变量记录的当前线程的值,尤其在线程池场景下,线程经常会 被复用,如果不清理自定义的 ThreadLocal 变量,可能会影响后续业务逻辑和造成内存泄露等问题。 尽量在代码中使用 try-finally 块进行回收。
This commit is contained in:
parent
4779d77265
commit
c4d9bd3a75
@ -120,26 +120,30 @@ public class LogInterceptor implements HandlerInterceptor {
|
|||||||
*/
|
*/
|
||||||
private LogDO logElapsedTimeAndException() {
|
private LogDO logElapsedTimeAndException() {
|
||||||
LogContext logContext = LogContextHolder.get();
|
LogContext logContext = LogContextHolder.get();
|
||||||
if (logContext != null) {
|
try {
|
||||||
LogContextHolder.remove();
|
if (logContext != null) {
|
||||||
LogDO logDO = new LogDO();
|
LogDO logDO = new LogDO();
|
||||||
logDO.setCreateTime(logContext.getCreateTime());
|
logDO.setCreateTime(logContext.getCreateTime());
|
||||||
logDO.setElapsedTime(System.currentTimeMillis() - LocalDateTimeUtil.toEpochMilli(logDO.getCreateTime()));
|
logDO
|
||||||
logDO.setStatus(LogStatusEnum.SUCCESS);
|
.setElapsedTime(System.currentTimeMillis() - LocalDateTimeUtil.toEpochMilli(logDO.getCreateTime()));
|
||||||
|
logDO.setStatus(LogStatusEnum.SUCCESS);
|
||||||
|
|
||||||
// 记录错误信息(非未知异常不记录异常详情,只记录错误信息)
|
// 记录错误信息(非未知异常不记录异常详情,只记录错误信息)
|
||||||
String errorMsg = logContext.getErrorMsg();
|
String errorMsg = logContext.getErrorMsg();
|
||||||
if (StrUtil.isNotBlank(errorMsg)) {
|
if (StrUtil.isNotBlank(errorMsg)) {
|
||||||
logDO.setStatus(LogStatusEnum.FAILURE);
|
logDO.setStatus(LogStatusEnum.FAILURE);
|
||||||
logDO.setErrorMsg(errorMsg);
|
logDO.setErrorMsg(errorMsg);
|
||||||
|
}
|
||||||
|
// 记录异常详情
|
||||||
|
Exception exception = logContext.getException();
|
||||||
|
if (exception != null) {
|
||||||
|
logDO.setStatus(LogStatusEnum.FAILURE);
|
||||||
|
logDO.setExceptionDetail(ExceptionUtil.stacktraceToString(exception, -1));
|
||||||
|
}
|
||||||
|
return logDO;
|
||||||
}
|
}
|
||||||
// 记录异常详情
|
} finally {
|
||||||
Exception exception = logContext.getException();
|
LogContextHolder.remove();
|
||||||
if (exception != null) {
|
|
||||||
logDO.setStatus(LogStatusEnum.FAILURE);
|
|
||||||
logDO.setExceptionDetail(ExceptionUtil.stacktraceToString(exception, -1));
|
|
||||||
}
|
|
||||||
return logDO;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user