package logger import ( "os" "time" projectConf "libreofficeMicro/pkg/config" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) var logger *Logger func L() *Logger { if logger == nil { InitLogger() } return logger } type Logger struct { *zap.Logger } func InitLogger() { if projectConf.Zap.IsNull() { projectConf.Zap.Level = DEFAULT_LEVEL } var minLevel zapcore.Level if projectConf.Zap.Level == "" { minLevel = zapcore.InfoLevel } else { var err error minLevel, err = zapcore.ParseLevel(projectConf.Zap.Level) if err != nil { minLevel = zapcore.InfoLevel } } encoderConfig := zapcore.EncoderConfig{ TimeKey: "time", NameKey: "name", LevelKey: "level", CallerKey: "caller", MessageKey: "message", StacktraceKey: "stackTrace", LineEnding: zapcore.DefaultLineEnding, EncodeTime: func(t time.Time, encoder zapcore.PrimitiveArrayEncoder) { encoder.AppendString(t.Format("2006-01-02 15:04:05.000")) }, EncodeLevel: zapcore.CapitalLevelEncoder, EncodeCaller: zapcore.FullCallerEncoder, EncodeDuration: zapcore.SecondsDurationEncoder, } encoder := zapcore.NewJSONEncoder(encoderConfig) writeSyncer := zapcore.AddSync(os.Stdout) core := zapcore.NewCore(encoder, writeSyncer, minLevel) logger = &Logger{ Logger: zap.New( core, zap.AddCaller(), zap.AddCallerSkip(1), zap.AddStacktrace(zap.ErrorLevel), zap.WithCaller(true), ), } zap.ReplaceGlobals(logger.Logger) } func (log *Logger) Debug(msg string, fields ...zap.Field) { log.Logger.Debug(msg, fields...) } func (log *Logger) Info(msg string, fields ...zap.Field) { log.Logger.Info(msg, fields...) } func (log *Logger) Warn(msg string, fields ...zap.Field) { log.Logger.Warn(msg, fields...) } func (log *Logger) Error(msg string, fields ...zap.Field) { log.Logger.Error(msg, fields...) } func (log *Logger) Fatal(msg string, fields ...zap.Field) { log.Logger.Fatal(msg, fields...) }