From 4f6763c61e1fbeeb197fb36c5c0c3c62b8c232c1 Mon Sep 17 00:00:00 2001 From: Apoorv Vardhan Date: Mon, 13 Apr 2020 15:47:22 +0530 Subject: [PATCH] Add leveled logging (#1249) Co-authored-by: Ibrahim Jarif --- logger.go | 30 +++++++++++++++++++++++++----- options.go | 13 ++++++++++++- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/logger.go b/logger.go index 3a9b8a337..c7b4cd6c1 100644 --- a/logger.go +++ b/logger.go @@ -62,24 +62,44 @@ func (opt *Options) Debugf(format string, v ...interface{}) { opt.Logger.Debugf(format, v...) } +type loggingLevel int + +const ( + DEBUG loggingLevel = iota + INFO + WARNING + ERROR +) + type defaultLog struct { *log.Logger + level loggingLevel } -var defaultLogger = &defaultLog{Logger: log.New(os.Stderr, "badger ", log.LstdFlags)} +func defaultLogger(level loggingLevel) *defaultLog { + return &defaultLog{Logger: log.New(os.Stderr, "badger ", log.LstdFlags), level: level} +} func (l *defaultLog) Errorf(f string, v ...interface{}) { - l.Printf("ERROR: "+f, v...) + if l.level <= ERROR { + l.Printf("ERROR: "+f, v...) + } } func (l *defaultLog) Warningf(f string, v ...interface{}) { - l.Printf("WARNING: "+f, v...) + if l.level <= WARNING { + l.Printf("WARNING: "+f, v...) + } } func (l *defaultLog) Infof(f string, v ...interface{}) { - l.Printf("INFO: "+f, v...) + if l.level <= INFO { + l.Printf("INFO: "+f, v...) + } } func (l *defaultLog) Debugf(f string, v ...interface{}) { - l.Printf("DEBUG: "+f, v...) + if l.level <= DEBUG { + l.Printf("DEBUG: "+f, v...) + } } diff --git a/options.go b/options.go index 775f41389..8ab8f7190 100644 --- a/options.go +++ b/options.go @@ -154,7 +154,7 @@ func DefaultOptions(path string) Options { ValueLogMaxEntries: 1000000, ValueThreshold: 32, Truncate: false, - Logger: defaultLogger, + Logger: defaultLogger(INFO), LogRotatesToFlush: 2, EventLogging: false, EncryptionKey: []byte{}, @@ -217,6 +217,17 @@ func (opt Options) WithValueDir(val string) Options { return opt } +// WithLoggingLevel returns a new Options value with logging level of the +// default logger set to the given value. +// LoggingLevel sets the level of logging. It should be one of DEBUG, INFO, +// WARNING or ERROR levels. +// +// The default value of LoggingLevel is INFO. +func (opt Options) WithLoggingLevel(val loggingLevel) Options { + opt.Logger = defaultLogger(val) + return opt +} + // WithSyncWrites returns a new Options value with SyncWrites set to the given value. // // When SyncWrites is true all writes are synced to disk. Setting this to false would achieve better