统一controller的日志记录
定义切面,然后匹配controller,around进行log打印
@Slf4j
@Component
@Aspect
public class ControllerLogAspect {
@Pointcut("execution(* delta.main.controller..*(..))")
public void requestServer() {
}
@SneakyThrows
@Around("requestServer()")
public Object doAround(ProceedingJoinPoint pjp) {
//记录请求开始执行时间:
long beginTime = System.currentTimeMillis();
//获取请求信息
ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = sra.getRequest();
//获取请求地址、请求类名、方法名
String requestMethod = request.getMethod();
String requestURI = request.getRequestURI();
String methodName = pjp.getSignature().getName();
String clazzName = pjp.getTarget().getClass().getName();
//获取请求参数:
MethodSignature ms = (MethodSignature) pjp.getSignature();
//获取请求参数类型
String[] parameterNames = ms.getParameterNames();
//获取请求参数值
Object[] parameterValues = pjp.getArgs();
StringBuilder paramsStringBuilder = new StringBuilder();
//组合请求参数,进行日志打印
if (parameterNames != null && parameterNames.length > 0) {
for (int i = 0; i < parameterNames.length; i++) {
if ((parameterValues[i] instanceof HttpServletRequest) || (parameterValues[i] instanceof HttpServletResponse)) {
paramsStringBuilder.append("[").append(parameterNames[i]).append("=").append(parameterValues[i]).append("]");
} else {
paramsStringBuilder.append("[").append(parameterNames[i]).append("=").append(JsonUtils.toJSONString(parameterValues[i])).append("]");
}
}
}
Object result = pjp.proceed();
String resultJson = (result != null) ? ((result instanceof Result) ? JsonUtils.toJSONString(result) : String.valueOf(result)) : "";
//记录请求完成执行时间:
long usedTime = System.currentTimeMillis() - beginTime;
//记录日志
log.info("\n请求执行完毕!\n" +
"URI信息:{}\n" +
"请求方式:{}\n" +
"请求耗时:{}ms\n" +
"请求响应方法:{}\n" +
"请求参数列表:{}\n" +
"返回值:{}", requestURI, requestMethod,usedTime, clazzName + "#" + methodName, paramsStringBuilder.toString(), resultJson);
return result;
}
}
原创:做时间的朋友
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2021-05-06 设计模式,建造者模式