Linux统计接口调用次数

背景:对外提供的接口使用过滤器TraceLogProviderFilter打印了请求相关的日志信息,所以可以根据日志中的关键词TraceLogProviderFilter来统计接口请求次数

日志打印格式

2020-02-23 12:06:49.156 INFO [com.zkh360.service.punchout.filter.TraceLogProviderFilter] 44295083-2cb8-436d-b976-e743985f25e4 【请求方法:getProductPrice,请求参数:“P88069”,[“HT2895”],,提供者耗时:19ms】;
需求:统计接口每日调用次数

一、grep

命令格式:grep -c 关键词 日志文件

说明:-c 符合样式的行数

root@iZbp1crt1zqre1ar8:/HD/logs/punchout# grep -c ‘TraceLogProviderFilter’ punchout.log
154621
root@iZbp1crt1zqre1ar8:/HD/logs/punchout#
二、grep和wc结合

命令格式:grep 关键词 日志文件 | wc -l

说明:grep 查找,wc -l 统计行数,配置使用表示按行统计关键词出现的次数,一行出现多次只算一次,此命令可以针对一行中会多次出现搜索词的查询

root@iZbp1crt1zqre1ar8:/HD/logs/punchout# grep ‘TraceLogProviderFilter’ punchout.log | wc -l
146134
root@iZbp1crt1zqre1ar8:/HD/logs/punchout#
三、zgrep

命令格式:grep 关键词 日志文件 | wc -l

说明:由于日志文件很大,现在很多日志都会每天按大小切分,并以压缩格式保存,这类文件就需要使用zgrep来统计

root@iZbp1crt1zqre1ar8:/HD/logs/punchout# zgrep -c ‘TraceLogProviderFilter’ punchout.2020-02-23_1.log.gz
274647
root@iZbp1crt1zqre1ar8:/HD/logs/punchout# zgrep -c ‘TraceLogProviderFilter’ punchout.2020-02-23_.log.gz
punchout.2020-02-23_1.log.gz:274647
punchout.2020-02-23_2.log.gz:274995
root@iZbp1crt1zqre1ar8:/HD/logs/punchout#
如果日志有切分,可以使用匹配符
来统计

————————————————
版权声明:本文为CSDN博主「彭小虾」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pjx827480541/article/details/104457511

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
统计Java接口调用次数,可以使用AOP(面向切面编程)技术,在接口调用时拦截请求,并记录接口调用次数。 具体实现步骤如下: 1. 定义一个注解,用于标记需要统计调用次数接口方法。 例如: ```java @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Count { } ``` 2. 创建一个切面类,使用@Aspect注解标记,并在类中定义一个切点,用于匹配被@Count注解标记的方法。 例如: ```java @Aspect @Component public class CountAspect { private Map<String, Integer> countMap = new ConcurrentHashMap<>(); @Pointcut("@annotation(com.example.demo.annotation.Count)") public void countPointcut() { } @Around("countPointcut()") public Object countAround(ProceedingJoinPoint joinPoint) throws Throwable { String methodName = joinPoint.getSignature().getName(); String className = joinPoint.getSignature().getDeclaringTypeName(); String key = className + "." + methodName; Integer count = countMap.get(key); if (count == null) { count = 1; } else { count++; } countMap.put(key, count); Object result = joinPoint.proceed(); return result; } } ``` 在上述代码中,我们使用了ConcurrentHashMap来存储每个接口方法的调用次数,初始值为1,每次调用自增1。 3. 在需要统计调用次数接口方法上添加@Count注解。 例如: ```java @RestController @RequestMapping("/demo") public class DemoController { @Autowired private DemoService demoService; @Count @GetMapping("/hello") public String hello() { return "hello"; } @GetMapping("/count") public Map<String, Integer> count() { return demoService.getCountMap(); } } ``` 在上述代码中,我们在hello()方法上添加了@Count注解,表示需要统计该方法的调用次数。 4. 创建一个服务类,用于获取调用次数统计结果。 例如: ```java @Service public class DemoService { @Autowired private CountAspect countAspect; public Map<String, Integer> getCountMap() { return countAspect.getCountMap(); } } ``` 在上述代码中,我们通过@Autowired注解注入了CountAspect切面类,并通过该类的getCountMap()方法获取到统计结果。 最后,启动应用程序,在浏览器中访问/hello接口,多次刷新页面,然后访问/count接口,即可获取到接口方法调用次数统计结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值