From dcb6991de9f44fdb3709b029d690f43dd45a86db Mon Sep 17 00:00:00 2001 From: rainerosion Date: Wed, 30 Jun 2021 23:57:29 +0800 Subject: [PATCH] add aop logs --- build.gradle.kts | 1 + .../email/timemail/mail/config/LogAspect.kt | 42 +++++++++++++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index a860b80..fab3dad 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -28,6 +28,7 @@ dependencies { implementation("org.postgresql:postgresql:42.2.18") implementation("org.projectlombok:lombok:1.18.12") implementation("org.projectlombok:lombok:1.18.12") + implementation("com.alibaba:fastjson:1.2.73") } tasks.withType { diff --git a/src/main/kotlin/email/timemail/mail/config/LogAspect.kt b/src/main/kotlin/email/timemail/mail/config/LogAspect.kt index 98249e1..c32af56 100644 --- a/src/main/kotlin/email/timemail/mail/config/LogAspect.kt +++ b/src/main/kotlin/email/timemail/mail/config/LogAspect.kt @@ -1,10 +1,15 @@ package email.timemail.mail.config +import com.alibaba.fastjson.JSONObject import lombok.extern.slf4j.Slf4j import org.aspectj.lang.JoinPoint +import org.aspectj.lang.ProceedingJoinPoint +import org.aspectj.lang.annotation.Around import org.aspectj.lang.annotation.Aspect import org.aspectj.lang.annotation.Before import org.aspectj.lang.annotation.Pointcut +import org.slf4j.Logger +import org.slf4j.LoggerFactory import org.springframework.stereotype.Component import org.springframework.web.context.request.RequestContextHolder import org.springframework.web.context.request.ServletRequestAttributes @@ -13,13 +18,44 @@ import org.springframework.web.context.request.ServletRequestAttributes @Component @Aspect open class LogAspect { - @Pointcut("execution(public * email.timemail.controller...*Controller.*(..))") - open fun webLog(): Unit {} + private val log: Logger = LoggerFactory.getLogger(LogAspect::class.java) + + @Pointcut("execution(public * email.timemail.mail.controller.*Controller.*(..))") + open fun webLog(): Unit { + } @Before("webLog()") open fun doBefore(joinPoint: JoinPoint): Unit { - var attributes: ServletRequestAttributes = RequestContextHolder.getRequestAttributes() as ServletRequestAttributes + var attributes: ServletRequestAttributes = + RequestContextHolder.getRequestAttributes() as ServletRequestAttributes var request = attributes.request + // 打印请求相关参数 + log.info("========================================== Start ==========================================") + // 打印请求 url + log.info("[请求URL] : {}", request.getRequestURL().toString()) + // 打印 Http method + log.info("[请求方法] : {}", request.getMethod()) + // 打印调用 controller 的全路径以及执行方法 + log.info( + "[请求类名] : {}.{}", + joinPoint.getSignature().getDeclaringTypeName(), + joinPoint.getSignature().getName() + ); + // 打印请求的 IP + log.info("[请求IP] : {}", request.getRemoteAddr()) + // 打印请求入参 + log.info("[请求参数] : {}", JSONObject.toJSONString(joinPoint.getArgs())) + } + @Around("webLog()") + open fun doAround(proceedingJoinPoint: ProceedingJoinPoint): Any { + var startTime = System.currentTimeMillis() + var result = proceedingJoinPoint.proceed() + // 打印出参 + log.info("[响应结果] : {}", JSONObject.toJSONString(result)) + // 执行耗时 + log.info("[请求耗时] : {} ms", System.currentTimeMillis() - startTime); + log.info("=========================================== End ===========================================") + return result; } } \ No newline at end of file