Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
pig_冷冷
Pig
提交
519b2fb4
Pig
项目概览
pig_冷冷
/
Pig
上一次同步 大约 1 年
通知
3
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Pig
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
519b2fb4
编写于
7月 13, 2021
作者:
Z
zhangran
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
对请求的API调用过滤,记录接口的请求时间,方便日志审计、告警、分析等运维操作
上级
733d91c5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
62 addition
and
0 deletion
+62
-0
pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/ApiLoggingFilter.java
...va/com/pig4cloud/pig/gateway/filter/ApiLoggingFilter.java
+62
-0
未找到文件。
pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/ApiLoggingFilter.java
0 → 100644
浏览文件 @
519b2fb4
package
com.pig4cloud.pig.gateway.filter
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.cloud.gateway.filter.GatewayFilterChain
;
import
org.springframework.cloud.gateway.filter.GlobalFilter
;
import
org.springframework.core.Ordered
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.server.ServerWebExchange
;
import
reactor.core.publisher.Mono
;
import
java.util.List
;
/**
* @author zhangran
* @date 2021/7/13
* <p>
* 全局拦截器,作用所有的微服务
* <p>
* 1. 对请求的API调用过滤,记录接口的请求时间,方便日志审计、告警、分析等运维操作
* 2. 后期可以扩展对接其他日志系统
* <p>
*/
@Slf4j
@Component
public
class
ApiLoggingFilter
implements
GlobalFilter
,
Ordered
{
private
static
final
String
START_TIME
=
"startTime"
;
private
static
final
String
X_REAL_IP
=
"X-Real-IP"
;
//nginx需要配置
@Override
public
Mono
<
Void
>
filter
(
ServerWebExchange
exchange
,
GatewayFilterChain
chain
)
{
String
info
=
String
.
format
(
"Method:{%s} Host:{%s} Path:{%s} Query:{%s}"
,
exchange
.
getRequest
().
getMethod
().
name
(),
exchange
.
getRequest
().
getURI
().
getHost
(),
exchange
.
getRequest
().
getURI
().
getPath
(),
exchange
.
getRequest
().
getQueryParams
());
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
info
);
}
exchange
.
getAttributes
().
put
(
START_TIME
,
System
.
currentTimeMillis
());
return
chain
.
filter
(
exchange
).
then
(
Mono
.
fromRunnable
(()
->
{
Long
startTime
=
exchange
.
getAttribute
(
START_TIME
);
if
(
startTime
!=
null
)
{
Long
executeTime
=
(
System
.
currentTimeMillis
()
-
startTime
);
List
<
String
>
ips
=
exchange
.
getRequest
().
getHeaders
().
get
(
X_REAL_IP
);
String
ip
=
ips
!=
null
?
ips
.
get
(
0
)
:
null
;
String
api
=
exchange
.
getRequest
().
getURI
().
getRawPath
();
int
code
=
exchange
.
getResponse
().
getStatusCode
()
!=
null
?
exchange
.
getResponse
().
getStatusCode
().
value
()
:
500
;
//当前仅记录日志,后续可以添加日志队列,来过滤请求慢的接口
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"来自IP地址:{}的请求接口:{},响应状态码:{},请求耗时:{}ms"
,
ip
,
api
,
code
,
executeTime
);
}
}
}));
}
@Override
public
int
getOrder
()
{
return
Ordered
.
LOWEST_PRECEDENCE
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录