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.
 
 

125 lines
2.6 KiB

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
}