文章插图
介绍Spring Mvc拦截器的作用很多,举几个例子
1.记录接口响应时间
2.判断用户是否登录
3.判断用户的权限
今天就用一个拦截器和一个awk命令,秒查线上超时接口
一个拦截器我们要写自己的拦截器一般有两种方式 。
1.实现HandlerInterceptor接口
2.继承HandlerInterceptorAdapter抽象类
我就直接继承了HandlerInterceptorAdapter抽象类,按需重写部分实现即可 。
HandlerInterceptor有如下3个方法
preHandler:在controller执行之前调用
postHandler:controller执行之后,且页面渲染之前调用
afterCompletion:页面渲染之后调用,一般用于资源清理操作
写一个记录接口响应时间的拦截器
文章插图
@Slf4jpublic 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处理完所有匹配数据后执行
第二种形式
【一个拦截器和一个awk命令,秒查线上超时接口】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/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin输出文件的每行内容awk '{print $0}' /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin输出第二列内容需要指定分隔符:
awk 'BEGIN{FS=":"}{print $2}' /etc/passwdxxx不需要指定分割符,默认空格,tab键,多个也可以分隔(如一个空格+一个tab键)
show.txt文件内容如下
# 空格分隔Python JAVA php# tab键分隔flink hadoop stormawk '{print $1}' show.txt输出如下:
pythonflink拦截器和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
推荐阅读
- 怎样判断浏览器浏览器ssl证书是不是生效了?
- 梦到自己害死人 做梦梦见害死了一个人
- 梦见自己生了一个男孩就会说话 梦见生了个男孩会说话
- 一个村全叫王富贵什么梗 王富贵是谁是什么梗
- 概说饶有意趣的古代茶器具雅名或浑号
- 职场冷暴力,摧毁一个人有多简单?3招教你完美反击,做职场达人
- 世界上最大的红薯有多少斤 一个红薯的重量
- 苹果|终于有双C口!苹果35W充电器曝光:可为多设备提供快充
- 生殖器上有黑斑怎么回事?
- 男人一个肾有什么影响?