package logger import ( "github.com/sirupsen/logrus" "runtime" "strconv" "strings" ) var Logger *SoLogger func init() { Logger = &SoLogger{logger: logrus.StandardLogger()} } type SoLogger struct { logger *logrus.Logger } func (l *SoLogger) enhance(args []any) (ret []any) { //logrus.SetReportCaller(true) ret = args for i := 2; i < 5; i++ { _, file, line, ok := runtime.Caller(i) if !ok { return } if strings.HasSuffix(file, "/pkg/utils/logger/exported.go") || strings.HasSuffix(file, "/pkg/utils/logger/logger.go") { continue } //caller = fmt.Sprintf("%s:%d ", file, line) caller := file + ":" + strconv.Itoa(line) + " " if arg0, ok := ret[0].(string); ok { ret[0] = caller + arg0 return } ret = make([]any, len(args)+1) ret[0] = caller copy(ret[1:], args) return } return } func (l *SoLogger) enhancef(format string, args []any) (retf string, ret []any) { args2 := make([]any, len(args)+1) args2[0] = format copy(args2[1:], args) ret = l.enhance(args2) retf = ret[0].(string) ret = ret[1:] return } func (l *SoLogger) Info(args ...any) { l.logger.Info(l.enhance(args)...) } func (l *SoLogger) Infoln(args ...any) { l.logger.Infoln(l.enhance(args)...) } func (l *SoLogger) Infof(format string, args ...any) { format, args = l.enhancef(format, args) l.logger.Infof(format, args...) } func (l *SoLogger) Warning(args ...any) { l.logger.Warning(l.enhance(args)...) } func (l *SoLogger) Warningln(args ...any) { l.logger.Warningln(l.enhance(args)...) } func (l *SoLogger) Warningf(format string, args ...any) { format, args = l.enhancef(format, args) l.logger.Warningf(format, args...) } func (l *SoLogger) Error(args ...any) { l.logger.Error(l.enhance(args)...) } func (l *SoLogger) Errorln(args ...any) { l.logger.Errorln(l.enhance(args)...) } func (l *SoLogger) Errorf(format string, args ...any) { format, args = l.enhancef(format, args) l.logger.Errorf(format, args...) } func (l *SoLogger) Fatal(args ...any) { l.logger.Fatal(l.enhance(args)...) } func (l *SoLogger) Fatalln(args ...any) { l.logger.Fatalln(l.enhance(args)...) } func (l *SoLogger) Fatalf(format string, args ...any) { format, args = l.enhancef(format, args) l.logger.Fatalf(format, args...) } var ( logrusLevels = []logrus.Level{logrus.TraceLevel, logrus.DebugLevel, logrus.InfoLevel, logrus.WarnLevel, logrus.ErrorLevel, logrus.FatalLevel, logrus.PanicLevel} logrusLevelsLen = len(logrusLevels) ) // V enable level // grpclog:info=2,warn=3... // logrus: warn=3,info=4... func (l *SoLogger) V(level int) bool { return level == 1 //if level >= logrusLevelsLen { // return true //} //return logrusLevels[level] <= l.logger.Level }