| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 | package logrusimport (	"fmt"	"log"	"strings")// Fields type, used to pass to `WithFields`.type Fields map[string]interface{}// Level typetype Level uint32// Convert the Level to a string. E.g. PanicLevel becomes "panic".func (level Level) String() string {	if b, err := level.MarshalText(); err == nil {		return string(b)	} else {		return "unknown"	}}// ParseLevel takes a string level and returns the Logrus log level constant.func ParseLevel(lvl string) (Level, error) {	switch strings.ToLower(lvl) {	case "panic":		return PanicLevel, nil	case "fatal":		return FatalLevel, nil	case "error":		return ErrorLevel, nil	case "warn", "warning":		return WarnLevel, nil	case "info":		return InfoLevel, nil	case "debug":		return DebugLevel, nil	case "trace":		return TraceLevel, nil	}	var l Level	return l, fmt.Errorf("not a valid logrus Level: %q", lvl)}// UnmarshalText implements encoding.TextUnmarshaler.func (level *Level) UnmarshalText(text []byte) error {	l, err := ParseLevel(string(text))	if err != nil {		return err	}	*level = l	return nil}func (level Level) MarshalText() ([]byte, error) {	switch level {	case TraceLevel:		return []byte("trace"), nil	case DebugLevel:		return []byte("debug"), nil	case InfoLevel:		return []byte("info"), nil	case WarnLevel:		return []byte("warning"), nil	case ErrorLevel:		return []byte("error"), nil	case FatalLevel:		return []byte("fatal"), nil	case PanicLevel:		return []byte("panic"), nil	}	return nil, fmt.Errorf("not a valid logrus level %d", level)}// A constant exposing all logging levelsvar AllLevels = []Level{	PanicLevel,	FatalLevel,	ErrorLevel,	WarnLevel,	InfoLevel,	DebugLevel,	TraceLevel,}// These are the different logging levels. You can set the logging level to log// on your instance of logger, obtained with `logrus.New()`.const (	// PanicLevel level, highest level of severity. Logs and then calls panic with the	// message passed to Debug, Info, ...	PanicLevel Level = iota	// FatalLevel level. Logs and then calls `logger.Exit(1)`. It will exit even if the	// logging level is set to Panic.	FatalLevel	// ErrorLevel level. Logs. Used for errors that should definitely be noted.	// Commonly used for hooks to send errors to an error tracking service.	ErrorLevel	// WarnLevel level. Non-critical entries that deserve eyes.	WarnLevel	// InfoLevel level. General operational entries about what's going on inside the	// application.	InfoLevel	// DebugLevel level. Usually only enabled when debugging. Very verbose logging.	DebugLevel	// TraceLevel level. Designates finer-grained informational events than the Debug.	TraceLevel)// Won't compile if StdLogger can't be realized by a log.Loggervar (	_ StdLogger = &log.Logger{}	_ StdLogger = &Entry{}	_ StdLogger = &Logger{})// StdLogger is what your logrus-enabled library should take, that way// it'll accept a stdlib logger and a logrus logger. There's no standard// interface, this is the closest we get, unfortunately.type StdLogger interface {	Print(...interface{})	Printf(string, ...interface{})	Println(...interface{})	Fatal(...interface{})	Fatalf(string, ...interface{})	Fatalln(...interface{})	Panic(...interface{})	Panicf(string, ...interface{})	Panicln(...interface{})}// The FieldLogger interface generalizes the Entry and Logger typestype FieldLogger interface {	WithField(key string, value interface{}) *Entry	WithFields(fields Fields) *Entry	WithError(err error) *Entry	Debugf(format string, args ...interface{})	Infof(format string, args ...interface{})	Printf(format string, args ...interface{})	Warnf(format string, args ...interface{})	Warningf(format string, args ...interface{})	Errorf(format string, args ...interface{})	Fatalf(format string, args ...interface{})	Panicf(format string, args ...interface{})	Debug(args ...interface{})	Info(args ...interface{})	Print(args ...interface{})	Warn(args ...interface{})	Warning(args ...interface{})	Error(args ...interface{})	Fatal(args ...interface{})	Panic(args ...interface{})	Debugln(args ...interface{})	Infoln(args ...interface{})	Println(args ...interface{})	Warnln(args ...interface{})	Warningln(args ...interface{})	Errorln(args ...interface{})	Fatalln(args ...interface{})	Panicln(args ...interface{})	// IsDebugEnabled() bool	// IsInfoEnabled() bool	// IsWarnEnabled() bool	// IsErrorEnabled() bool	// IsFatalEnabled() bool	// IsPanicEnabled() bool}// Ext1FieldLogger (the first extension to FieldLogger) is superfluous, it is// here for consistancy. Do not use. Use Logger or Entry instead.type Ext1FieldLogger interface {	FieldLogger	Tracef(format string, args ...interface{})	Trace(args ...interface{})	Traceln(args ...interface{})}
 |