github.com/thrasher-corp/golangci-lint@v1.17.3/pkg/logutils/stderr_log.go (about) 1 package logutils 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/sirupsen/logrus" //nolint:depguard 8 9 "github.com/golangci/golangci-lint/pkg/exitcodes" 10 ) 11 12 type StderrLog struct { 13 name string 14 logger *logrus.Logger 15 level LogLevel 16 } 17 18 var _ Log = NewStderrLog("") 19 20 func NewStderrLog(name string) *StderrLog { 21 sl := &StderrLog{ 22 name: name, 23 logger: logrus.New(), 24 level: LogLevelWarn, 25 } 26 27 switch os.Getenv("LOG_LEVEL") { 28 case "error", "err": 29 sl.logger.SetLevel(logrus.ErrorLevel) 30 case "warning", "warn": 31 sl.logger.SetLevel(logrus.WarnLevel) 32 case "info": 33 sl.logger.SetLevel(logrus.InfoLevel) 34 default: 35 sl.logger.SetLevel(logrus.DebugLevel) 36 } 37 38 sl.logger.Out = StdErr 39 sl.logger.Formatter = &logrus.TextFormatter{ 40 DisableTimestamp: true, // `INFO[0007] msg` -> `INFO msg` 41 } 42 43 return sl 44 } 45 46 func (sl StderrLog) prefix() string { 47 prefix := "" 48 if sl.name != "" { 49 prefix = fmt.Sprintf("[%s] ", sl.name) 50 } 51 52 return prefix 53 } 54 55 func (sl StderrLog) Fatalf(format string, args ...interface{}) { 56 sl.logger.Errorf("%s%s", sl.prefix(), fmt.Sprintf(format, args...)) 57 os.Exit(exitcodes.Failure) 58 } 59 60 func (sl StderrLog) Errorf(format string, args ...interface{}) { 61 if sl.level > LogLevelError { 62 return 63 } 64 65 sl.logger.Errorf("%s%s", sl.prefix(), fmt.Sprintf(format, args...)) 66 // don't call exitIfTest() because the idea is to 67 // crash on hidden errors (warnings); but Errorf MUST NOT be 68 // called on hidden errors, see log levels comments. 69 } 70 71 func (sl StderrLog) Warnf(format string, args ...interface{}) { 72 if sl.level > LogLevelWarn { 73 return 74 } 75 76 sl.logger.Warnf("%s%s", sl.prefix(), fmt.Sprintf(format, args...)) 77 } 78 79 func (sl StderrLog) Infof(format string, args ...interface{}) { 80 if sl.level > LogLevelInfo { 81 return 82 } 83 84 sl.logger.Infof("%s%s", sl.prefix(), fmt.Sprintf(format, args...)) 85 } 86 87 func (sl StderrLog) Debugf(format string, args ...interface{}) { 88 if sl.level > LogLevelDebug { 89 return 90 } 91 92 sl.logger.Debugf("%s%s", sl.prefix(), fmt.Sprintf(format, args...)) 93 } 94 95 func (sl StderrLog) Child(name string) Log { 96 prefix := "" 97 if sl.name != "" { 98 prefix = sl.name + "/" 99 } 100 101 child := sl 102 child.name = prefix + name 103 104 return &child 105 } 106 107 func (sl *StderrLog) SetLevel(level LogLevel) { 108 sl.level = level 109 }