介绍

  • 该模块默认功能用于控制台打印接口的访问痕迹
  • 同时添加了个注解 @ApiLog 用于启动保存接口访问痕迹
    • 该注解默也是控制台打印
      • 不会跟默认的全局打印冲突(有注解时,全局默认会单个被注解的接口失效)
    • 想要进行保存请参考示例 实现 ApiLogSave
  • 满足了以下功能
    • 访问接口地址
    • 接口参数
    • 使用时间
    • 返回参数
    • 记录访问者IP
  • 不满足的功能
    • 敏感参数的遮掩

      引入依赖

      1. <dependency>
      2. <groupId>cn.jdevelops</groupId>
      3. <artifactId>aops-apilog</artifactId>
      4. <version>2.0.2</version>
      5. </dependency>

      使用

      如果只是简单控制台查看调用信息则无需任何配置

使用注意

  1. 控制台默认输出功能只会拦截controller的访问

    @Pointcut(“execution( ...controller..(..))”)

  2. 使用nginx代理时,nginx的配置如下

    proxy_set_header X-Real-IP $remote_addr;

  1. location /test/ {
  2. proxy_pass http://localhost:9002/;
  3. proxy_set_header Host $host;
  4. proxy_set_header X-Forwarded-Host $server_name;
  5. proxy_set_header X-Real-IP $remote_addr;
  6. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  7. }

控制台日志样例

0:0:0:0:0:0:0:1 = localhost

  1. 2021-12-16 11:45:24.687 INFO 82436 --- [nio-8080-exec-2] c.t.apilog.controller.TestController : 请求IP:0:0:0:0:0:0:0:1
  2. 2021-12-16 11:45:25.202 INFO 82436 --- [nio-8080-exec-2] c.t.apilog.controller.TestController : 请求地址:GET http://localhost:8080/
  3. 2021-12-16 11:45:25.853 INFO 82436 --- [nio-8080-exec-2] c.t.apilog.controller.TestController : 入参:param=12
  4. 2021-12-16 11:45:28.199 INFO 82436 --- [nio-8080-exec-2] c.t.apilog.controller.TestController : 出参 ... 耗时 1796 毫秒

@ApiLog注解的使用

在结接口上加入此注解后,会单独打印此接口的调用日志(放心不会跟上面的冲突,只会打印一次)

  1. @GetMapping("/test")
  2. @ApiLog
  3. public String test2(String param){
  4. return param;
  5. }

默认控制台输出

  1. 2021-12-16 12:28:59.244 INFO 101892 --- [nio-8080-exec-2] c.j.apilog.server.impl.ApiLogSaveImpl : api接口调用信息默认输出控制台:ApiMonitoring(apiName=/2, apiKey=null, status=true, inParams=["12"], outParams="12", callTime=2021-12-16 12:28:59, poxyIp=0:0:0:0:0:0:0:1)

设置为保存到数据库 / 自定义输出格式

  • 如果出现 错误Field apiLogSave in com.detabes.apilog.aspect.ApiLogAspectSave required a single bean, but 2 were found:
    • 请在实现类上加入 @Primary

实现 ApiLogSave

  1. /**
  2. * 重新实现ApiLog日志保存方法
  3. *
  4. * @author tn
  5. * @version 1
  6. * @date 2021-12-16 12:34
  7. */
  8. @Component
  9. public class ApiLogSaveImpl implements ApiLogSave {
  10. @Override
  11. public void saveLog(ApiMonitoring apilog) {
  12. // 自定义数据记录方案,可在这里存库,重构打印格式等
  13. System.out.println(apilog.toString());
  14. }
  15. }

示例项目地址

https://github.com/en-o/Jdevelops-Example/tree/main/ApiLog

问题修复

2.0.2及其以下存在问题

2.0.2以上已经修复

get请求中文拼接参数乱码

其他

输出到指定的日志文件2.0.6开始

logback-spring.xml

  1. logback-spring.xml 中添加下述 appender 配置 ```xml [%-5level] %X{tl} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{36} - %m%n INFO ACCEPT DENY ${ROOT}%d/api.%i.log.zip ${MAXHISTORY} ${FILESIZE}
  1. 2. root 下添加 `<appender-refref="api"/>`
  2. ```xml
  3. <springProfile name="dev">
  4. <root level="debug">
  5. <appender-ref ref="STDOUT"/>
  6. </root>
  7. </springProfile>
  8. <!-- 非dev环境下-->
  9. <springProfile name="!dev">
  10. <!-- logger设置输出到文件,输出级别为info -->
  11. <root level="INFO">
  12. <appender-ref ref="STDOUT" />
  13. <appender-ref ref="DEBUG" />
  14. <appender-ref ref="ERROR" />
  15. <appender-ref ref="WARN" />
  16. <appender-ref ref="INFO" />
  17. <appender-ref ref="TRACE" />
  18. <appender-ref ref="api" />
  19. </root>
  20. </springProfile>