
* 前端支持顶部菜单栏模式 * 自动化代码单条获取方法不再需要取data.xxx直接取用data * 自动化代码支持选择索引 * 自动化代码回滚支持自行选择是否删除菜单、API、表 * 日志增加定期清理功能 * 权限配置API部分,支持根据API真实path进行筛选 * 修复了一些已知bug * 修复了一个sql注入漏洞 --------- Co-authored-by: xuedinge <781408517@qq.com> Co-authored-by: Qing Liang <106448173+xue-ding-e@users.noreply.github.com> Co-authored-by: wall-js <wall_js@foxmail.com> Co-authored-by: Wall <307606056@qq.com> Co-authored-by: leooza <leooza@163.com> Co-authored-by: piexlMax(奇淼 <qimiaojiangjizhao@gmail.com> Co-authored-by: hxl <52553624@qq.com> Co-authored-by: zsc1003 <11476303+zsc1003@user.noreply.gitee.com>
69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
package internal
|
|
|
|
import (
|
|
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
type ZapCore struct {
|
|
level zapcore.Level
|
|
zapcore.Core
|
|
}
|
|
|
|
func NewZapCore(level zapcore.Level) *ZapCore {
|
|
entity := &ZapCore{level: level}
|
|
syncer := entity.WriteSyncer()
|
|
levelEnabler := zap.LevelEnablerFunc(func(l zapcore.Level) bool {
|
|
return l == level
|
|
})
|
|
entity.Core = zapcore.NewCore(global.GVA_CONFIG.Zap.Encoder(), syncer, levelEnabler)
|
|
return entity
|
|
}
|
|
|
|
func (z *ZapCore) WriteSyncer(formats ...string) zapcore.WriteSyncer {
|
|
cutter := NewCutter(
|
|
global.GVA_CONFIG.Zap.Director,
|
|
z.level.String(),
|
|
global.GVA_CONFIG.Zap.RetentionDay,
|
|
CutterWithLayout(time.DateOnly),
|
|
CutterWithFormats(formats...),
|
|
)
|
|
if global.GVA_CONFIG.Zap.LogInConsole {
|
|
multiSyncer := zapcore.NewMultiWriteSyncer(os.Stdout, cutter)
|
|
return zapcore.AddSync(multiSyncer)
|
|
}
|
|
return zapcore.AddSync(cutter)
|
|
}
|
|
|
|
func (z *ZapCore) Enabled(level zapcore.Level) bool {
|
|
return z.level == level
|
|
}
|
|
|
|
func (z *ZapCore) With(fields []zapcore.Field) zapcore.Core {
|
|
return z.Core.With(fields)
|
|
}
|
|
|
|
func (z *ZapCore) Check(entry zapcore.Entry, check *zapcore.CheckedEntry) *zapcore.CheckedEntry {
|
|
if z.Enabled(entry.Level) {
|
|
return check.AddCore(entry, z)
|
|
}
|
|
return check
|
|
}
|
|
|
|
func (z *ZapCore) Write(entry zapcore.Entry, fields []zapcore.Field) error {
|
|
for i := 0; i < len(fields); i++ {
|
|
if fields[i].Key == "business" || fields[i].Key == "folder" || fields[i].Key == "directory" {
|
|
syncer := z.WriteSyncer(fields[i].String)
|
|
z.Core = zapcore.NewCore(global.GVA_CONFIG.Zap.Encoder(), syncer, z.level)
|
|
}
|
|
}
|
|
return z.Core.Write(entry, fields)
|
|
}
|
|
|
|
func (z *ZapCore) Sync() error {
|
|
return z.Core.Sync()
|
|
}
|