项目结构
切面日志记录信息
@Aspect
@Component
@Slf4j
public class AopLog {
private static final String START_TIME = "request-start";
private static final Logger log = LoggerFactory.getLogger(AopLog.class);
@Pointcut("execution(public * com.xkcoding.log.aop.controller.*Controller.*(..))")
public void log() {
}
@Before("log()")
public void beforeLog(JoinPoint point) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();
log.info("【请求 URL】:{}", request.getRequestURL());
log.info("【请求 IP】:{}", request.getRemoteAddr());
log.info("【请求类名】:{},【请求方法名】:{}", point.getSignature().getDeclaringTypeName(), point.getSignature().getName());
Map parameterMap = request.getParameterMap();
log.info("【请求参数】:{},", JSONUtil.toJsonStr(parameterMap));
Long start = System.currentTimeMillis();
request.setAttribute(START_TIME, start);
}
@Around("log()")
public Object aroundLog(ProceedingJoinPoint point) throws Throwable {
Object result = point.proceed();
log.info("【返回值】:{}", JSONUtil.toJsonStr(result));
return result;
}
@AfterReturning("log()")
public void afterReturning() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();
Long start = (Long) request.getAttribute(START_TIME);
Long end = System.currentTimeMillis();
log.info("【请求耗时】:{}毫秒", end - start);
String header = request.getHeader("User-Agent");
UserAgent userAgent = UserAgent.parseUserAgentString(header);
log.info("【浏览器类型】:{},【操作系统】:{},【原始User-Agent】:{}", userAgent.getBrowser().toString(), userAgent.getOperatingSystem().toString(), header);
}
}
测试类
@RestController
public class TestController {
@GetMapping("/test")
public Dict test(String who) {
return Dict.create().set("who", StrUtil.isBlank(who) ? "me" : who);
}
}
xml文件配置
INFO %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n UTF-8 ERROR DENY ACCEPT logs/spring-boot-demo-log-aop/info.created_on_%d{yyyy-MM-dd}.part_%i.log 90 2MB %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n UTF-8 Error logs/spring-boot-demo-log-aop/error.created_on_%d{yyyy-MM-dd}.part_%i.log 90 2MB %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n UTF-8



