spy.properties 文件 放resources下
module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
appender=com.p6spy.engine.spy.appender.Slf4JLogger
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=%(currentTime) | %(executionTime) | %(category) | connection %(connectionId) | %(sqlSingleLine)
pom.xml 增加
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
application.yaml 修改,注意 jdbc:p6spy:mysql:
spring:
datasource:
url: jdbc:p6spy:mysql://localhost:3306/xxxxx?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
username: root
password: xxxxx
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
打印路径
package com.stock.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Aspect
@Component
public class MapperLogAspect {
private static final Logger log = LoggerFactory.getLogger(MapperLogAspect.class);
/**
* 切 Mapper 接口(和你 logback 里 com.stock.mapper 对齐)
*/
@Around("execution(* com.stock.mapper..*Mapper.*(..)) || execution(* com.stock.repository..*Repository.*(..))")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
long begin = System.nanoTime();
Object result;
try {
result = pjp.proceed();
} finally {
long end = System.nanoTime();
log.info("👉👉👉👉👉Mapper 方法路径:{},参数:{},耗时:{} ms",
pjp.getSignature(),
Arrays.toString(pjp.getArgs()),
(end - begin) / 1_000_000);
}
return result;
}
}

2026-08-18_02-25-19.png