调试与优化:smart-cloud接口日志与SQL日志切面打印技巧
【免费下载链接】smart-cloud一站式 Spring Cloud 微服务脚手架 —— 让微服务开发像搭积木一样简单。支持服务合并部署与拆分部署、接口加解密签名、日志数据 脱敏、接口数据mock、接口文档自动生成、请求幂等校验、接口日志&&sql日志切面打印、分表分库分布式事务、国际化语言、接口监控及服务监控等项目地址: https://gitcode.com/gh_mirrors/smar/smart-cloud
在微服务开发中,日志是排查问题、优化性能的关键。smart-cloud作为一站式Spring Cloud微服务脚手架,提供了强大的接口日志与SQL日志切面打印功能,帮助开发者快速定位问题。本文将详细介绍如何利用smart-cloud的日志切面功能进行高效调试与优化。
为什么选择切面打印日志?
传统的日志打印方式需要在每个方法中手动添加日志代码,不仅繁琐,还容易遗漏。而切面编程(AOP)可以在不侵入业务代码的情况下,统一实现日志打印功能。smart-cloud通过@Aspect注解实现了日志切面,主要体现在以下模块:
- 方法日志切面:smart-cloud-starter/smart-cloud-starter-method-log
- 日志脱敏切面:smart-cloud-starter/smart-cloud-starter-log-mask
接口日志切面打印实战
1. 自动记录接口请求与响应
smart-cloud的接口日志切面会自动记录请求参数、响应结果、耗时等关键信息。通过@Around注解环绕通知,在方法执行前后打印日志:
@Around("execution(* io.github.smart.cloud.starter.web..*Controller.*(..))") public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { // 打印请求参数 log.info("Request: {}", JSON.toJSONString(joinPoint.getArgs())); long startTime = System.currentTimeMillis(); try { Object result = joinPoint.proceed(); // 打印响应结果 log.info("Response: {}", JSON.toJSONString(result)); return result; } finally { // 打印耗时 log.info("Time cost: {}ms", System.currentTimeMillis() - startTime); } }2. 接口文档与日志联动
smart-cloud支持接口文档自动生成,结合日志切面可以更直观地分析接口调用情况。例如,YAPI接口文档展示了接口列表和详细参数:
通过日志中的请求路径和文档中的接口定义,可以快速对应到具体的业务逻辑。
SQL日志切面打印优化
1. 打印SQL执行信息
在开发过程中,SQL语句的执行效率直接影响系统性能。smart-cloud的SQL日志切面可以打印SQL语句、执行参数和耗时,帮助开发者优化SQL:
@AfterReturning("execution(* org.mybatis.spring.SqlSessionTemplate.*(..))") public void logSql(JoinPoint joinPoint) { // 获取SQL语句和参数 String sql = getSql(joinPoint); Object[] args = joinPoint.getArgs(); log.info("SQL: {} Args: {}", sql, Arrays.toString(args)); }2. 避免敏感数据泄露
日志脱敏是保护用户隐私的重要措施。smart-cloud的日志脱敏模块通过@Before注解在日志打印前对敏感字段进行处理:
@Before("execution(* io.github.smart.cloud.starter.log.mask..*.*(..)) && @annotation(maskLog)") public void maskLogBefore(JoinPoint joinPoint, MaskLog maskLog) { // 脱敏处理敏感字段 Object[] args = joinPoint.getArgs(); for (Object arg : args) { if (arg instanceof User) { ((User) arg).setPassword("******"); } } }快速上手:开启日志切面功能
- 引入依赖:在
pom.xml中添加方法日志和日志脱敏依赖
<dependency> <groupId>io.github.smart.cloud</groupId> <artifactId>smart-cloud-starter-method-log</artifactId> </dependency> <dependency> <groupId>io.github.smart.cloud</groupId> <artifactId>smart-cloud-starter-log-mask</artifactId> </dependency>- 配置日志级别:在
application.yml中设置日志级别为INFO
logging: level: io.github.smart.cloud.starter.method.log: INFO io.github.smart.cloud.starter.log.mask: INFO- 使用注解:在需要打印日志的方法上添加
@MethodLog注解
@RestController @RequestMapping("/api/user") public class UserController { @MethodLog @GetMapping("/info") public Response<UserInfo> getUserInfo(@RequestParam String userId) { // 业务逻辑 } }常见问题与解决方案
Q: 日志打印过多影响性能怎么办?
A: 可以通过@MethodLog(ignore = true)注解排除不需要打印日志的方法,或者在生产环境将日志级别调整为WARN。
Q: 如何自定义日志格式?
A: 可以实现ILogFormatter接口,自定义日志输出格式,并在配置类中注入:
@Component public class CustomLogFormatter implements ILogFormatter { @Override public String format(Object[] args) { return "Custom log: " + JSON.toJSONString(args); } }总结
smart-cloud的接口日志与SQL日志切面打印功能,通过AOP技术实现了无侵入式的日志记录,极大地提高了开发效率和问题排查速度。结合接口文档和日志脱敏功能,既能满足调试需求,又能保障数据安全。赶快尝试使用smart-cloud,让微服务开发像搭积木一样简单!
要开始使用smart-cloud,只需克隆仓库:
git clone https://gitcode.com/gh_mirrors/smar/smart-cloud更多详细文档请参考项目中的docs目录。
【免费下载链接】smart-cloud一站式 Spring Cloud 微服务脚手架 —— 让微服务开发像搭积木一样简单。支持服务合并部署与拆分部署、接口加解密签名、日志数据 脱敏、接口数据mock、接口文档自动生成、请求幂等校验、接口日志&&sql日志切面打印、分表分库分布式事务、国际化语言、接口监控及服务监控等项目地址: https://gitcode.com/gh_mirrors/smar/smart-cloud
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考