package logger import ( "os" "github.com/sirupsen/logrus" ) // Fields type for structured logging type Fields logrus.Fields var ( // defaultLogger is the default logger instance defaultLogger = logrus.New() ) func init() { // Set default configuration defaultLogger.SetOutput(os.Stdout) defaultLogger.SetLevel(logrus.InfoLevel) defaultLogger.SetFormatter(&logrus.TextFormatter{ FullTimestamp: true, }) } // Configure sets up the global logger configuration func Configure(level string, noColor, forceColors, inJSON bool) error { // Set log level if level != "" { lvl, err := logrus.ParseLevel(level) if err != nil { return err } defaultLogger.SetLevel(lvl) } // Configure formatter if inJSON { defaultLogger.SetFormatter(&logrus.JSONFormatter{}) } else { defaultLogger.SetFormatter(&logrus.TextFormatter{ ForceColors: forceColors, DisableColors: noColor, FullTimestamp: true, }) } return nil } // NewLogger creates a new logger entry with component field func NewLogger(component string) *logrus.Entry { return defaultLogger.WithField("component", component) } // WithRequestID adds request ID to the logger entry func WithRequestID(logger *logrus.Entry, requestID string) *logrus.Entry { return logger.WithField("request_id", requestID) } // GetLogger returns the default logger instance func GetLogger() *logrus.Logger { return defaultLogger }