zap_core.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package internal
  2. import (
  3. "github.com/flipped-aurora/gin-vue-admin/server/global"
  4. "go.uber.org/zap"
  5. "go.uber.org/zap/zapcore"
  6. "os"
  7. "time"
  8. )
  9. type ZapCore struct {
  10. level zapcore.Level
  11. zapcore.Core
  12. }
  13. func NewZapCore(level zapcore.Level) *ZapCore {
  14. entity := &ZapCore{level: level}
  15. syncer := entity.WriteSyncer()
  16. levelEnabler := zap.LevelEnablerFunc(func(l zapcore.Level) bool {
  17. return l == level
  18. })
  19. entity.Core = zapcore.NewCore(global.GVA_CONFIG.Zap.Encoder(), syncer, levelEnabler)
  20. return entity
  21. }
  22. func (z *ZapCore) WriteSyncer(formats ...string) zapcore.WriteSyncer {
  23. cutter := NewCutter(
  24. global.GVA_CONFIG.Zap.Director,
  25. z.level.String(),
  26. global.GVA_CONFIG.Zap.RetentionDay,
  27. CutterWithLayout(time.DateOnly),
  28. CutterWithFormats(formats...),
  29. )
  30. if global.GVA_CONFIG.Zap.LogInConsole {
  31. multiSyncer := zapcore.NewMultiWriteSyncer(os.Stdout, cutter)
  32. return zapcore.AddSync(multiSyncer)
  33. }
  34. return zapcore.AddSync(cutter)
  35. }
  36. func (z *ZapCore) Enabled(level zapcore.Level) bool {
  37. return z.level == level
  38. }
  39. func (z *ZapCore) With(fields []zapcore.Field) zapcore.Core {
  40. return z.Core.With(fields)
  41. }
  42. func (z *ZapCore) Check(entry zapcore.Entry, check *zapcore.CheckedEntry) *zapcore.CheckedEntry {
  43. if z.Enabled(entry.Level) {
  44. return check.AddCore(entry, z)
  45. }
  46. return check
  47. }
  48. func (z *ZapCore) Write(entry zapcore.Entry, fields []zapcore.Field) error {
  49. for i := 0; i < len(fields); i++ {
  50. if fields[i].Key == "business" || fields[i].Key == "folder" || fields[i].Key == "directory" {
  51. syncer := z.WriteSyncer(fields[i].String)
  52. z.Core = zapcore.NewCore(global.GVA_CONFIG.Zap.Encoder(), syncer, z.level)
  53. }
  54. }
  55. return z.Core.Write(entry, fields)
  56. }
  57. func (z *ZapCore) Sync() error {
  58. return z.Core.Sync()
  59. }