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