package logger import ( "os" "github.com/sirupsen/logrus" ) var ( // Logger is the global logger instance Logger *logrus.Logger ) // Init initializes the logger with the specified log level func Init(level string, devMode bool) { Logger = logrus.New() // Set output to stdout Logger.SetOutput(os.Stdout) // Set formatter - use JSON in production, text in dev if devMode { Logger.SetFormatter(&logrus.TextFormatter{ FullTimestamp: true, ForceColors: true, }) } else { Logger.SetFormatter(&logrus.JSONFormatter{ TimestampFormat: "2006-01-02T15:04:05.000Z07:00", }) } // Parse and set log level logLevel, err := logrus.ParseLevel(level) if err != nil { // Default to INFO if invalid level logLevel = logrus.InfoLevel Logger.Warnf("Invalid log level '%s', defaulting to INFO", level) } Logger.SetLevel(logLevel) } // Debug logs a debug message func Debug(args ...interface{}) { Logger.Debug(args...) } // Debugf logs a formatted debug message func Debugf(format string, args ...interface{}) { Logger.Debugf(format, args...) } // Info logs an info message func Info(args ...interface{}) { Logger.Info(args...) } // Infof logs a formatted info message func Infof(format string, args ...interface{}) { Logger.Infof(format, args...) } // Warn logs a warning message func Warn(args ...interface{}) { Logger.Warn(args...) } // Warnf logs a formatted warning message func Warnf(format string, args ...interface{}) { Logger.Warnf(format, args...) } // Error logs an error message func Error(args ...interface{}) { Logger.Error(args...) } // Errorf logs a formatted error message func Errorf(format string, args ...interface{}) { Logger.Errorf(format, args...) } // Fatal logs a fatal message and exits func Fatal(args ...interface{}) { Logger.Fatal(args...) } // Fatalf logs a formatted fatal message and exits func Fatalf(format string, args ...interface{}) { Logger.Fatalf(format, args...) } // WithField creates an entry with a single field func WithField(key string, value interface{}) *logrus.Entry { return Logger.WithField(key, value) } // WithFields creates an entry with multiple fields func WithFields(fields logrus.Fields) *logrus.Entry { return Logger.WithFields(fields) }