github.com/unionj-cloud/go-doudou@v1.3.8-0.20221011095552-0088008e5b31/framework/logger/configure.go (about) 1 package logger 2 3 import ( 4 "github.com/mattn/go-colorable" 5 "github.com/sirupsen/logrus" 6 "github.com/unionj-cloud/go-doudou/framework/internal/config" 7 "github.com/unionj-cloud/go-doudou/toolkit/stringutils" 8 "io" 9 ) 10 11 type LoggerOption func(*logrus.Logger) 12 13 func WithWritter(writer io.Writer) LoggerOption { 14 return func(log *logrus.Logger) { 15 log.SetOutput(writer) 16 } 17 } 18 19 func WithFormatter(formatter logrus.Formatter) LoggerOption { 20 return func(log *logrus.Logger) { 21 log.SetFormatter(formatter) 22 } 23 } 24 25 func WithReportCaller(reportCaller bool) LoggerOption { 26 return func(log *logrus.Logger) { 27 log.SetReportCaller(reportCaller) 28 } 29 } 30 31 func defaultFormatter() logrus.Formatter { 32 format := config.DefaultGddLogFormat 33 if stringutils.IsNotEmpty(config.GddLogFormat.Load()) { 34 format = config.GddLogFormat.Load() 35 } 36 var formatter logrus.Formatter 37 switch format { 38 case "json": 39 jf := new(logrus.JSONFormatter) 40 jf.TimestampFormat = "2006-01-02 15:04:05" 41 jf.DisableHTMLEscape = true 42 formatter = jf 43 case "text": 44 tf := new(logrus.TextFormatter) 45 tf.TimestampFormat = "2006-01-02 15:04:05" 46 tf.FullTimestamp = true 47 tf.ForceColors = true 48 formatter = tf 49 default: 50 } 51 return formatter 52 } 53 54 // LogLevel alias for logrus.Level 55 type LogLevel logrus.Level 56 57 // Decode decodes value to LogLevel 58 func (ll *LogLevel) Decode(value string) error { 59 //if stringutils.IsEmpty(value) { 60 // value = DefaultGddLogLevel 61 //} 62 switch value { 63 case "panic": 64 *ll = LogLevel(logrus.PanicLevel) 65 case "fatal": 66 *ll = LogLevel(logrus.FatalLevel) 67 case "error": 68 *ll = LogLevel(logrus.ErrorLevel) 69 case "warn": 70 *ll = LogLevel(logrus.WarnLevel) 71 case "debug": 72 *ll = LogLevel(logrus.DebugLevel) 73 case "trace": 74 *ll = LogLevel(logrus.TraceLevel) 75 default: 76 *ll = LogLevel(logrus.InfoLevel) 77 } 78 return nil 79 } 80 81 func Init(opts ...LoggerOption) { 82 var loglevel LogLevel 83 (&loglevel).Decode(config.GddLogLevel.Load()) 84 85 logger := logrus.StandardLogger() 86 logger.SetFormatter(defaultFormatter()) 87 logger.SetLevel(logrus.Level(loglevel)) 88 logrus.SetOutput(colorable.NewColorableStdout()) 89 90 for _, opt := range opts { 91 opt(logger) 92 } 93 }