Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
飞一样的人
gin-vue-admin
提交
bdfb04e3
G
gin-vue-admin
项目概览
飞一样的人
/
gin-vue-admin
与 Fork 源项目一致
Fork自
FLIPPED-AURORA / gin-vue-admin
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gin-vue-admin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
bdfb04e3
编写于
10月 13, 2021
作者:
S
songzhibin97
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:中间件日志聚集
上级
c6501c2d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
88 addition
and
1 deletion
+88
-1
server/middleware/limit_ip.go
server/middleware/limit_ip.go
+1
-1
server/middleware/logger.go
server/middleware/logger.go
+87
-0
未找到文件。
server/middleware/limit_ip.go
浏览文件 @
bdfb04e3
...
...
@@ -73,7 +73,7 @@ func SetLimitWithTime(key string, limit int, expiration time.Duration) error {
pipe
:=
global
.
GVA_REDIS
.
TxPipeline
()
pipe
.
Incr
(
context
.
Background
(),
key
)
pipe
.
Expire
(
context
.
Background
(),
key
,
expiration
)
_
,
err
:
=
pipe
.
Exec
(
context
.
Background
())
_
,
err
=
pipe
.
Exec
(
context
.
Background
())
return
err
}
else
{
//次数
...
...
server/middleware/logger.go
0 → 100644
浏览文件 @
bdfb04e3
package
middleware
import
(
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"strings"
"time"
"github.com/gin-gonic/gin"
)
// LogLayout 日志layout
type
LogLayout
struct
{
Time
time
.
Time
Metadata
map
[
string
]
interface
{}
// 存储自定义原数据
Path
string
// 访问路径
Query
string
// 携带query
Body
string
// 携带body数据
IP
string
// ip地址
UserAgent
string
// 代理
Error
string
// 错误
Cost
time
.
Duration
// 花费时间
Source
string
// 来源
}
type
Logger
struct
{
// Filter 用户自定义过滤
Filter
func
(
c
*
gin
.
Context
)
bool
// FilterKeyword 关键字过滤(key)
FilterKeyword
func
(
layout
*
LogLayout
)
bool
// AuthProcess 鉴权处理
AuthProcess
func
(
c
*
gin
.
Context
,
layout
*
LogLayout
)
// 日志处理
Print
func
(
LogLayout
)
// Source 服务唯一标识
Source
string
}
func
(
l
Logger
)
SetLoggerMiddleware
()
gin
.
HandlerFunc
{
return
func
(
c
*
gin
.
Context
)
{
start
:=
time
.
Now
()
path
:=
c
.
Request
.
URL
.
Path
query
:=
c
.
Request
.
URL
.
RawQuery
var
body
[]
byte
if
l
.
Filter
!=
nil
&&
!
l
.
Filter
(
c
)
{
body
,
_
=
c
.
GetRawData
()
// 将原body塞回去
c
.
Request
.
Body
=
ioutil
.
NopCloser
(
bytes
.
NewBuffer
(
body
))
}
c
.
Next
()
cost
:=
time
.
Since
(
start
)
layout
:=
LogLayout
{
Time
:
time
.
Now
(),
Path
:
path
,
Query
:
query
,
IP
:
c
.
ClientIP
(),
UserAgent
:
c
.
Request
.
UserAgent
(),
Error
:
strings
.
TrimRight
(
c
.
Errors
.
ByType
(
gin
.
ErrorTypePrivate
)
.
String
(),
"
\n
"
),
Cost
:
cost
,
Source
:
l
.
Source
,
}
if
l
.
Filter
!=
nil
&&
!
l
.
Filter
(
c
)
{
layout
.
Body
=
string
(
body
)
}
// 处理鉴权需要的信息
l
.
AuthProcess
(
c
,
&
layout
)
if
l
.
FilterKeyword
!=
nil
{
// 自行判断key/value 脱敏等
l
.
FilterKeyword
(
&
layout
)
}
// 自行处理日志
l
.
Print
(
layout
)
}
}
func
DefaultLogger
()
gin
.
HandlerFunc
{
return
Logger
{
Print
:
func
(
layout
LogLayout
)
{
// 标准输出,k8s做收集
v
,
_
:=
json
.
Marshal
(
layout
)
fmt
.
Println
(
string
(
v
))
},
Source
:
"GVA"
,
}
.
SetLoggerMiddleware
()
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录