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  }