介绍
- 该模块默认功能用于控制台打印接口的访问痕迹
- 同时添加了个注解
@ApiLog用于启动保存接口访问痕迹- 该注解默也是控制台打印
- 不会跟默认的全局打印冲突(有注解时,全局默认会单个被注解的接口失效)
- 想要进行保存请参考示例 实现 ApiLogSave
- 该注解默也是控制台打印
- 满足了以下功能
- 访问接口地址
- 接口参数
- 使用时间
- 返回参数
- 记录访问者IP
- 不满足的功能
使用注意
控制台默认输出功能只会拦截controller的访问
@Pointcut(“execution( ...controller..(..))”)
使用nginx代理时,nginx的配置如下
proxy_set_header X-Real-IP $remote_addr;
location /test/ {proxy_pass http://localhost:9002/;proxy_set_header Host $host;proxy_set_header X-Forwarded-Host $server_name;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
控制台日志样例
0:0:0:0:0:0:0:1 = localhost
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:12021-12-16 11:45:25.202 INFO 82436 --- [nio-8080-exec-2] c.t.apilog.controller.TestController : 请求地址:GET http://localhost:8080/2021-12-16 11:45:25.853 INFO 82436 --- [nio-8080-exec-2] c.t.apilog.controller.TestController : 入参:param=122021-12-16 11:45:28.199 INFO 82436 --- [nio-8080-exec-2] c.t.apilog.controller.TestController : 出参 ... 耗时 1796 毫秒
@ApiLog注解的使用
在结接口上加入此注解后,会单独打印此接口的调用日志(放心不会跟上面的冲突,只会打印一次)
@GetMapping("/test")@ApiLogpublic String test2(String param){return param;}
默认控制台输出
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
/*** 重新实现ApiLog日志保存方法** @author tn* @version 1* @date 2021-12-16 12:34*/@Componentpublic class ApiLogSaveImpl implements ApiLogSave {@Overridepublic void saveLog(ApiMonitoring apilog) {// 自定义数据记录方案,可在这里存库,重构打印格式等System.out.println(apilog.toString());}}
示例项目地址
问题修复
2.0.2及其以下存在问题
2.0.2以上已经修复
get请求中文拼接参数乱码
其他
输出到指定的日志文件2.0.6开始
logback-spring.xml
- 在
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}
2. 在 root 下添加 `<appender-refref="api"/>````xml<springProfile name="dev"><root level="debug"><appender-ref ref="STDOUT"/></root></springProfile><!-- 非dev环境下--><springProfile name="!dev"><!-- logger设置输出到文件,输出级别为info --><root level="INFO"><appender-ref ref="STDOUT" /><appender-ref ref="DEBUG" /><appender-ref ref="ERROR" /><appender-ref ref="WARN" /><appender-ref ref="INFO" /><appender-ref ref="TRACE" /><appender-ref ref="api" /></root></springProfile>
