专业的JAVA编程教程与资源

网站首页 > java教程 正文

一个拦截器和一个awk命令,秒查线上超时接口

temp10 2024-11-04 14:08:27 java教程 13 ℃ 0 评论



一个拦截器和一个awk命令,秒查线上超时接口

介绍

Spring Mvc拦截器的作用很多,举几个例子

1.记录接口响应时间

2.判断用户是否登录

3.判断用户的权限

今天就用一个拦截器和一个awk命令,秒查线上超时接口

一个拦截器

我们要写自己的拦截器一般有两种方式。

1.实现HandlerInterceptor接口

2.继承HandlerInterceptorAdapter抽象类

我就直接继承了HandlerInterceptorAdapter抽象类,按需重写部分实现即可。

HandlerInterceptor有如下3个方法

preHandler:在controller执行之前调用

postHandler:controller执行之后,且页面渲染之前调用

afterCompletion:页面渲染之后调用,一般用于资源清理操作

写一个记录接口响应时间的拦截器


@Slf4j
public class SystemInterceptor extends HandlerInterceptorAdapter {

 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
 request.setAttribute("request-starttime", System.currentTimeMillis());
 log.info("request enter:{}", request.getRequestURI());
 return true;
 }

 @Override
 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
 Long startTime = (Long) request.getAttribute("request-starttime");
 if (startTime != null) {
 long cost = System.currentTimeMillis() - startTime;
 log.info("request cost:[" + request.getRequestURI() + ", "
 + request.getQueryString() + "] " + cost);
 }
 }
}

配置拦截器



一个awk命令

awk是一个文本处理工具,通常用于处理数据并生成结果报告

语法格式

第一种形式

awk 'BEGIN{}pattern{commands}END{}' file_name

语法格式解释

BEGIN正式处理数据之前

pattern匹配模式

{commands}匹配命令,可能多行

END处理完所有匹配数据后执行

第二种形式

standard output | awk 'BEGIN{}pattern{commands}END{}'

awk的内置变量

内置变量含义

$0整行内容

$1-$n当前行的第1-n个字段(按照指定分隔符分割后)

NF(Number Field)当前行的字段个数,也就是多少列

NR(Number Row)当前行的行号,从1开始计数

FNR(File Number Row)多文件处理时,每个文件行号单独计数,都是从0开始

FS(Field Separator)输入字段分割符。不指定默认以空格或者Tab键分割

RS(Row Separator)输入行分割符。默认回车\n

OFS(Output Field Sepatator)输出字段分割符。默认为空格

ORS(Output Row)输出行分隔符。默认为回车

FILENAME当前输入的文件名字

ARGC命令行参数个数

ARGV命令行参数数组

看一下/etc/passwd文件的内容

cat /etc/passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

输出文件的每行内容

awk '{print $0}' /etc/passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

输出第二列内容

需要指定分隔符:

awk 'BEGIN{FS=":"}{print $2}' /etc/passwd

x
x
x

不需要指定分割符,默认空格,tab键,多个也可以分隔(如一个空格+一个tab键)

show.txt文件内容如下

# 空格分隔
python java php
# tab键分隔
flink	hadoop	storm
awk '{print $1}' show.txt

输出如下:

python
flink

拦截器和awk命令都介绍完毕。

grep 'request cost' xxx.log | awk ' $7 >1000 {print $0}' \ 

上面这个命令就是打印xxx.log中接口响应时间超过1s的日志,相信经过前面的介绍,你已经看懂了

效果演示

省略了部分内容

[INFO] request cost:[/api/message/getKfConversation, null] 1005
[INFO] request cost:[/api/kf/meet, null] 1004


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表