package logger import ( "os" "recipe-manager/config" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) type TaoLogger struct { cfg *config.ServerConfig enableDebug bool Log *zap.Logger } func (tl *TaoLogger) initConfig() *zap.Logger { enableDebugMode := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { return lvl >= zap.InfoLevel || tl.enableDebug }) productionConfig := zap.NewProductionEncoderConfig() productionConfig.EncodeTime = zapcore.ISO8601TimeEncoder productionConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder // fileEncoder := zapcore.NewJSONEncoder(productionConfig) consoleEncoder := zapcore.NewConsoleEncoder(productionConfig) // logCore := zapcore.NewTee( // zapcore.NewCore(zapcore.NewJSONEncoder(productionConfig), // zapcore.NewCore(zapcore.NewConsoleEncoder(zapcore.EncoderConfig{ // TimeKey: "timestamp", // LevelKey: "level", // NameKey: "logger", // CallerKey: "caller", // MessageKey: "message", // StacktraceKey: "error", // EncodeLevel: zapcore.CapitalColorLevelEncoder, // EncodeTime: zapcore.ISO8601TimeEncoder, // }), zapcore.AddSync(os.Stdout), enableDebugMode), // ) core := zapcore.NewTee( // zapcore.NewCore(fileEncoder, zapcore.AddSync(), enableDebugMode), zapcore.NewCore(consoleEncoder, zapcore.AddSync(os.Stdout), enableDebugMode), ) return zap.New(core) } func NewTaoLogger(cfg *config.ServerConfig) *TaoLogger { logger := &TaoLogger{cfg, false, nil} logger.Log = logger.initConfig() if cfg.Debug { // logger.SetLevel("DEBUG") logger.Log.Debug("Debug mode", zap.Bool("enable", cfg.Debug)) logger.enableDebug = true } return logger }