1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- 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()
- }
|