You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

82 lines
1.9 KiB

// 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",
})
}