mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-11-04 10:57:10 +08:00 
			
		
		
		
	优化:基于阿里巴巴 Java 开发手册(黄山版)优化 ThreadLocal 使用
1.编程规约>并发处理>第6条: 【强制】必须回收自定义的 ThreadLocal 变量记录的当前线程的值,尤其在线程池场景下,线程经常会 被复用,如果不清理自定义的 ThreadLocal 变量,可能会影响后续业务逻辑和造成内存泄露等问题。 尽量在代码中使用 try-finally 块进行回收。
This commit is contained in:
		@@ -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;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user