假设我有一个具有简单架构(控制器,服务,存储库)的基本Spring引导应用程序。我试图记录应用程序中每一层的执行时间(以及每一层的不同情况),我试图使用带有@Around Aspect的Spring AOP来执行此操作。事实是该应用程序是一个并发应用程序,并且可以同时出现多个请求,因此,如果我做这样的事情:
@Around("controller() || restController() ")
public Object logAround(final ProceedingJoinPoint joinPoint) throws Throwable {
log.info("time elapsed" + timeElapsed)
//Log some other Controller useful info
}
@Around("service() ")
public Object logAround(final ProceedingJoinPoint joinPoint) throws Throwable {
log.info("time elapsed" + timeElapsed)
//Log some other Service useful info
}
@Around("repository() ")
public Object logAround(final ProceedingJoinPoint joinPoint) throws Throwable {
log.info("time elapsed" + timeElapsed)
//Log some other Repository useful info
}
我将无法跟踪每个请求的日志,因为一次可能会发生多个并发请求。 我正在将SLF4J与lombok实现一起使用,但是我想我可以切换到SLF4J的任何其他实现,例如log4j,如果它对我想要的有所不同。 我希望每个请求都有一个单行日志。
答案 0 :(得分:1)
跟踪每个请求的时间。
通过如下更改日志格式来添加线程ID作为日志记录的一部分
每个请求的线程ID都是唯一的
%d%-5level [%thread] [%logger {36}]:%msg%n%rEx
在记录每个层的时间性能时,请将性能日志重定向到单独的文件。