package log import ( "os" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) // Logger object is exported to facilitate migration // to the single logger instance. Use outside `package log` // should be avoided. var post *zap.Logger // Initialises the logger func init() { var err error mode := os.Getenv("runtime") if mode == "" { mode = "prod" } logLevel := zapcore.InfoLevel if mode == "debug" { logLevel = zapcore.DebugLevel } config := zap.NewDevelopmentConfig() config.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder config.Level = zap.NewAtomicLevelAt(logLevel) post, err = config.Build(zap.AddCallerSkip(1)) if err != nil { panic("Failed to initialize logger: " + err.Error()) } defer post.Sync() Info("Logger initialised", zap.String("level", logLevel.String()), zap.String("runtime", mode)) } func Info(msg string, fields ...zap.Field) { post.Info(msg, fields...) } func Debug(msg string, fields ...zap.Field) { post.Debug(msg, fields...) } func Warn(msg string, fields ...zap.Field) { post.Warn(msg, fields...) } func Error(msg string, fields ...zap.Field) { post.Error(msg, fields...) } func Fatal(msg string, fields ...zap.Field) { post.Fatal(msg, fields...) } func Panic(msg string, fields ...zap.Field) { post.Panic(msg, fields...) }