package rocketmq import ( "strings" "sync" "git.shuncheng.lu/bigthing/gocommon/pkg/internal/util" "git.shuncheng.lu/bigthing/gocommon/pkg/internal/file" "github.com/apache/rocketmq-client-go/v2/rlog" "github.com/sirupsen/logrus" ) // 只允许初始化一次 var ( initLoggerOnce sync.Once ) func initLogger(config *Config) { if config.LogFileName == "" { return } initLoggerOnce.Do(func() { logger, err := newRocketLogger(config.LogLevel, file.NewDefaultRotateWriter(config.LogFileName)) if err != nil { panic(err) } rlog.SetLogger(logger) }) } func newRocketLogger(level string, config file.RotateWriterConfig) (rlog.Logger, error) { r := &defaultLogger{ logger: logrus.New(), } switch strings.ToLower(level) { case "debug": r.logger.SetLevel(logrus.DebugLevel) case "warn": r.logger.SetLevel(logrus.WarnLevel) case "error": r.logger.SetLevel(logrus.ErrorLevel) default: r.logger.SetLevel(logrus.InfoLevel) } writer, err := config.NewWriter() if err != nil { return nil, err } r.logger.Out = writer util.Infof("[Rocket-MQ] init logger success, level: %v, filename: %v", r.logger.Level, config.FileName) return r, nil } // copy https://github.com/apache/rocketmq-client-go/blob/v2.0.0/rlog/log.go#L66 type defaultLogger struct { logger *logrus.Logger } func (l *defaultLogger) Debug(msg string, fields map[string]interface{}) { if msg == "" && len(fields) == 0 { return } l.logger.WithFields(fields).Debug(msg) } func (l *defaultLogger) Info(msg string, fields map[string]interface{}) { if msg == "" && len(fields) == 0 { return } l.logger.WithFields(fields).Info(msg) } func (l *defaultLogger) Warning(msg string, fields map[string]interface{}) { if msg == "" && len(fields) == 0 { return } l.logger.WithFields(fields).Warning(msg) } func (l *defaultLogger) Error(msg string, fields map[string]interface{}) { if msg == "" && len(fields) == 0 { return } l.logger.WithFields(fields).WithFields(fields).Error(msg) } func (l *defaultLogger) Fatal(msg string, fields map[string]interface{}) { if msg == "" && len(fields) == 0 { return } l.logger.WithFields(fields).Fatal(msg) }