// Package logger provides centralized logging functionality package logger import ( "strings" "spiderman/pkg/config" "github.com/sirupsen/logrus" ) // Logger is the global logger instance var Logger *logrus.Logger // Init initializes the global logger with configuration func Init(cfg *config.LogConfig) { Logger = logrus.New() // Set log level level := parseLogLevel(cfg.Level) Logger.SetLevel(level) // Set log format if strings.ToLower(cfg.Format) == "json" { Logger.SetFormatter(&logrus.JSONFormatter{ TimestampFormat: "2006-01-02 15:04:05", }) } else { Logger.SetFormatter(&logrus.TextFormatter{ FullTimestamp: true, TimestampFormat: "2006-01-02 15:04:05", ForceColors: true, }) } Logger.WithFields(logrus.Fields{ "level": Logger.GetLevel().String(), "format": cfg.Format, }).Info("Logger initialized") } // parseLogLevel converts string log level to logrus level func parseLogLevel(levelStr string) logrus.Level { switch strings.ToLower(levelStr) { case "debug": return logrus.DebugLevel case "info": return logrus.InfoLevel case "warn", "warning": return logrus.WarnLevel case "error": return logrus.ErrorLevel case "fatal": return logrus.FatalLevel case "panic": return logrus.PanicLevel default: return logrus.InfoLevel } } // GetLoggerWithFields returns a logger with pre-set fields func GetLoggerWithFields(fields logrus.Fields) *logrus.Entry { return Logger.WithFields(fields) } // GetRequestLogger returns a logger with request-specific fields func GetRequestLogger(method, path, remoteAddr string) *logrus.Entry { return Logger.WithFields(logrus.Fields{ "method": method, "path": path, "remote_ip": remoteAddr, "component": "api", }) } // GetFabricLogger returns a logger with Fabric-specific fields func GetFabricLogger() *logrus.Entry { return Logger.WithFields(logrus.Fields{ "component": "fabric", }) }