介绍
- 该模块默认功能用于控制台打印接口的访问痕迹
- 同时添加了个注解
@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:1
2021-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=12
2021-12-16 11:45:28.199 INFO 82436 --- [nio-8080-exec-2] c.t.apilog.controller.TestController : 出参 ... 耗时 1796 毫秒
@ApiLog注解的使用
在结接口上加入此注解后,会单独打印此接口的调用日志(放心不会跟上面的冲突,只会打印一次)
@GetMapping("/test")
@ApiLog
public 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
*/
@Component
public class ApiLogSaveImpl implements ApiLogSave {
@Override
public 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>