Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
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.
186 lines
4.7 KiB
186 lines
4.7 KiB
package logrus |
|
|
|
import ( |
|
"fmt" |
|
"log" |
|
"strings" |
|
) |
|
|
|
// Fields type, used to pass to `WithFields`. |
|
type Fields map[string]interface{} |
|
|
|
// Level type |
|
type 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 levels |
|
var 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.Logger |
|
var ( |
|
_ 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 types |
|
type 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{}) |
|
}
|
|
|