From c4d9bd3a7582857813b7352b42e0f2eaf3c95ab8 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Sat, 4 Mar 2023 14:01:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E5=9F=BA=E4=BA=8E?= =?UTF-8?q?=E9=98=BF=E9=87=8C=E5=B7=B4=E5=B7=B4=20Java=20=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E6=89=8B=E5=86=8C(=E9=BB=84=E5=B1=B1=E7=89=88)?= =?UTF-8?q?=E4=BC=98=E5=8C=96=20ThreadLocal=20=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.编程规约>并发处理>第6条: 【强制】必须回收自定义的 ThreadLocal 变量记录的当前线程的值,尤其在线程池场景下,线程经常会 被复用,如果不清理自定义的 ThreadLocal 变量,可能会影响后续业务逻辑和造成内存泄露等问题。 尽量在代码中使用 try-finally 块进行回收。 --- .../monitor/interceptor/LogInterceptor.java | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/interceptor/LogInterceptor.java b/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/interceptor/LogInterceptor.java index b0b91be0..fb1f012b 100644 --- a/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/interceptor/LogInterceptor.java +++ b/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/interceptor/LogInterceptor.java @@ -120,26 +120,30 @@ public class LogInterceptor implements HandlerInterceptor { */ private LogDO logElapsedTimeAndException() { LogContext logContext = LogContextHolder.get(); - if (logContext != null) { - LogContextHolder.remove(); - LogDO logDO = new LogDO(); - logDO.setCreateTime(logContext.getCreateTime()); - logDO.setElapsedTime(System.currentTimeMillis() - LocalDateTimeUtil.toEpochMilli(logDO.getCreateTime())); - logDO.setStatus(LogStatusEnum.SUCCESS); + try { + if (logContext != null) { + LogDO logDO = new LogDO(); + logDO.setCreateTime(logContext.getCreateTime()); + logDO + .setElapsedTime(System.currentTimeMillis() - LocalDateTimeUtil.toEpochMilli(logDO.getCreateTime())); + logDO.setStatus(LogStatusEnum.SUCCESS); - // 记录错误信息(非未知异常不记录异常详情,只记录错误信息) - String errorMsg = logContext.getErrorMsg(); - if (StrUtil.isNotBlank(errorMsg)) { - logDO.setStatus(LogStatusEnum.FAILURE); - logDO.setErrorMsg(errorMsg); + // 记录错误信息(非未知异常不记录异常详情,只记录错误信息) + String errorMsg = logContext.getErrorMsg(); + if (StrUtil.isNotBlank(errorMsg)) { + logDO.setStatus(LogStatusEnum.FAILURE); + logDO.setErrorMsg(errorMsg); + } + // 记录异常详情 + Exception exception = logContext.getException(); + if (exception != null) { + logDO.setStatus(LogStatusEnum.FAILURE); + logDO.setExceptionDetail(ExceptionUtil.stacktraceToString(exception, -1)); + } + return logDO; } - // 记录异常详情 - Exception exception = logContext.getException(); - if (exception != null) { - logDO.setStatus(LogStatusEnum.FAILURE); - logDO.setExceptionDetail(ExceptionUtil.stacktraceToString(exception, -1)); - } - return logDO; + } finally { + LogContextHolder.remove(); } return null; }