From 5bf8bb3a36ddfd9c4d85b143af6f7a556a47230a Mon Sep 17 00:00:00 2001 From: Gregory Eremin Date: Fri, 27 Jul 2018 20:24:57 +0200 Subject: [PATCH] Introduce log levels --- log/log.go | 69 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 55 insertions(+), 14 deletions(-) diff --git a/log/log.go b/log/log.go index eb010e1..9113631 100644 --- a/log/log.go +++ b/log/log.go @@ -6,64 +6,105 @@ import ( "github.com/sirupsen/logrus" ) -// Logger is a Logrus logger used by the package. -var Logger *logrus.Logger - // F is a short alias for a string to interface map. type F map[string]interface{} -func init() { +// Level defines logging level. +type Level byte + +const ( + // LevelDebug is a logging level of debug messages. + LevelDebug Level = iota + // LevelInfo is a logging level of info messages. + LevelInfo + // LevelWarn is a logging level of warning messages. + LevelWarn + // LevelError is a logging level of error messages. + LevelError + // LevelFatal is a logging level of fatal messages. + LevelFatal +) + +var ( + // Logger is a Logrus logger used by the package. Logger = logrus.New() + + level = LevelDebug +) + +// SetLevel sets up minimum logging level. +func SetLevel(l Level) { + level = l } // Debug prints a debug message with given fields attached. func Debug(ctx context.Context, msg string, fields ...F) { - withFields(mergeFields(ctx, fields)).Debug(msg) + if level >= LevelDebug { + withFields(mergeFields(ctx, fields)).Debug(msg) + } } // Debugf prints a formatted debug message. func Debugf(ctx context.Context, format string, args ...interface{}) { - withFields(contextFields(ctx)).Debugf(format, args...) + if level >= LevelDebug { + withFields(contextFields(ctx)).Debugf(format, args...) + } } // Info prints an info message with given fields attached. func Info(ctx context.Context, msg string, fields ...F) { - withFields(mergeFields(ctx, fields)).Info(msg) + if level >= LevelInfo { + withFields(mergeFields(ctx, fields)).Info(msg) + } } // Infof prints a formatted info message. func Infof(ctx context.Context, format string, args ...interface{}) { - withFields(contextFields(ctx)).Infof(format, args...) + if level >= LevelInfo { + withFields(contextFields(ctx)).Infof(format, args...) + } } // Warn prints an warning message with given fields attached. func Warn(ctx context.Context, msg string, fields ...F) { - withFields(mergeFields(ctx, fields)).Warn(msg) + if level >= LevelWarn { + withFields(mergeFields(ctx, fields)).Warn(msg) + } } // Warnf prints a formatted warning message. func Warnf(ctx context.Context, format string, args ...interface{}) { - withFields(contextFields(ctx)).Warnf(format, args...) + if level >= LevelWarn { + withFields(contextFields(ctx)).Warnf(format, args...) + } } // Error prints an error message with given fields attached. func Error(ctx context.Context, msg string, fields ...F) { - withFields(mergeFields(ctx, fields)).Error(msg) + if level >= LevelError { + withFields(mergeFields(ctx, fields)).Error(msg) + } } // Errorf prints a formatted error message. func Errorf(ctx context.Context, format string, args ...interface{}) { - withFields(contextFields(ctx)).Errorf(format, args...) + if level >= LevelError { + withFields(contextFields(ctx)).Errorf(format, args...) + } } // Fatal prints an error message with given fields attached and then exits. func Fatal(ctx context.Context, msg string, fields ...F) { - withFields(mergeFields(ctx, fields)).Fatal(msg) + if level >= LevelFatal { + withFields(mergeFields(ctx, fields)).Fatal(msg) + } } // Fatalf prints a formatted error message and then exits. func Fatalf(ctx context.Context, format string, args ...interface{}) { - withFields(contextFields(ctx)).Fatalf(format, args...) + if level >= LevelFatal { + withFields(contextFields(ctx)).Fatalf(format, args...) + } } func mergeFields(ctx context.Context, fields []F) F {