專案中用advice里記錄日志,但是請求多的時候資料就錯亂了,請問如何解決這個問題?
以下是我的代碼:
```java
@Aspect
@Component
@EnableAspectJAutoProxy
public class AdviceApi {
@Autowired
private LogAnalyseService logAnalyseService;
@Bean
public LogChannelCall getBean() {
return new LogChannelCall();
}
private ThreadLocal<Long> startTime = new ThreadLocal<>();
@Pointcut("execution(* com.api.controller.*.*(..))")
public void pointcut() {
}
@Before("pointcut()")
public void before() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest();
String userId = request.getParameter("userId");
String remoteAddr = request.getRemoteAddr();
logChannelCall.setUserId(userId);
logChannelCall.setIp(remoteAddr);
startTime.set(System.currentTimeMillis());
}
@After("pointcut()")
public void after() {
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
boolean successful = response.getStatus() == 200;
logChannelCall.setSuccessful(successful);
}
@AfterReturning("pointcut()")
public void afterReturning() {
logChannelCall.setSuccessful(true);
logChannelCall.setResponseTime(System.currentTimeMillis() - startTime.get());
logAnalyseService.insertV3Log(logChannelCall);
}
@AfterThrowing(throwing = "ex", pointcut = "pointcut() && !pointcutPlayAddress() && !pointcutInnerPlayAddress() && !pointcutProAddress()")
public void afterThrowing(Exception ex) {
logChannelCall.setSuccessful(false);
logChannelCall.setReason(ex.getMessage());
logChannelCall.setResponseTime(System.currentTimeMillis() - startTime.get());
logAnalyseService.insertV3Log(logChannelCall);
}
}
```
在請求量大的時候,A日志的引數會把B日志的引數記錄下來,前幾天發生這樣一件事,A請求正在執行,B請求報了例外,B請求的錯誤日志被A記錄了。請問如何解決?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/276823.html
標籤:Java相關