diff options
| author | Felix Hanley <felix@userspace.com.au> | 2020-05-20 01:35:50 +0000 |
|---|---|---|
| committer | Felix Hanley <felix@userspace.com.au> | 2020-05-20 01:36:03 +0000 |
| commit | 21b31fdacf93bd5bb54937fb7c25a73b61205344 (patch) | |
| tree | f1c50ff4a8dab9bd6e86ed3a8402ac0b1ef34ba0 /logger.go | |
| parent | 0b93ba86bf1b495ebb765a6cdca20a121ac1e9c7 (diff) | |
| download | logger-21b31fdacf93bd5bb54937fb7c25a73b61205344.tar.gz logger-21b31fdacf93bd5bb54937fb7c25a73b61205344.tar.bz2 | |
Reduce levels to debug and not debug
Diffstat (limited to 'logger.go')
| -rw-r--r-- | logger.go | 104 |
1 files changed, 54 insertions, 50 deletions
@@ -1,6 +1,7 @@ package logger import ( + "fmt" "os" "strings" "sync" @@ -10,11 +11,11 @@ import ( "src.userspace.com.au/logger/writers/kv" ) -// Logger is a simple levelled logger. +// Logger is a simple logger with optional structured. type Logger struct { + debug bool name string - min message.Level - fields map[string]interface{} + fields map[string]string writers []message.Writer lock *sync.RWMutex } @@ -22,8 +23,8 @@ type Logger struct { // New creates a new logger instance func New(opts ...Option) (*Logger, error) { l := &Logger{ - min: message.WARN, - fields: make(map[string]interface{}), + debug: (os.Getenv("DEBUG") != ""), + fields: make(map[string]string), lock: new(sync.RWMutex), writers: []message.Writer{}, } @@ -46,28 +47,20 @@ func New(opts ...Option) (*Logger, error) { return l, nil } -// Log a message with no level. -func (l *Logger) Log(msg string, args ...interface{}) *Logger { - l.LogAtLevel(message.NONE, msg, args...) - return l +// Log a message. +func (l *Logger) Log(args ...interface{}) *Logger { + return l.log(args...) } -// LogAtLevel logs a message with a specified level. -func (l *Logger) LogAtLevel(lvl message.Level, msg string, args ...interface{}) *Logger { - if l.min < lvl { +func (l *Logger) log(args ...interface{}) *Logger { + if len(args) == 0 { return l } - - l.lock.RLock() - defer l.lock.RUnlock() - m := message.Message{ Name: l.name, Time: time.Now(), - Level: lvl, - Content: msg, + Content: toString(args...), Fields: l.fields, - Extras: args, } for _, w := range l.writers { @@ -76,56 +69,67 @@ func (l *Logger) LogAtLevel(lvl message.Level, msg string, args ...interface{}) return l } -// Error logs an error message. -func (l *Logger) Error(msg string, args ...interface{}) *Logger { - return l.LogAtLevel(message.ERROR, msg, args...) -} - -// Warn logs an information message. -func (l *Logger) Warn(msg string, args ...interface{}) *Logger { - return l.LogAtLevel(message.WARN, msg, args...) +// toString converts interface to string +func toString(args ...interface{}) string { + var buf strings.Builder + last := len(args) + for i, a := range args { + buf.WriteString(fmt.Sprint(a)) + if i < last-1 { + buf.WriteByte(' ') + } + } + return buf.String() } -// Info logs an information message. -func (l *Logger) Info(msg string, args ...interface{}) *Logger { - return l.LogAtLevel(message.INFO, msg, args...) +// Info is an alias for Log. +func (l *Logger) Info(args ...interface{}) *Logger { + return l.log(args...) } // Debug logs a debug message. -func (l *Logger) Debug(msg string, args ...interface{}) *Logger { - return l.LogAtLevel(message.DEBUG, msg, args...) +func (l *Logger) Debug(args ...interface{}) *Logger { + if l.debug { + return l.log(args...) + } + return l } -// IsWarn determines the info status for a logger instance. -// Use this to conditionally execute blocks of code depending on the log verbosity. -func (l *Logger) IsWarn() bool { return l.min >= message.WARN } - -// IsInfo determines the info status for a logger instance. -// Use this to conditionally execute blocks of code depending on the log verbosity. -func (l *Logger) IsInfo() bool { return l.min >= message.INFO } - // IsDebug determines the debug status for a logger instance. // Use this to conditionally execute blocks of code depending on the log verbosity. -func (l *Logger) IsDebug() bool { return l.min >= message.DEBUG } +func (l *Logger) IsDebug() bool { return l.debug } + +// Field enables setting or changing the default fields for a logger instance. +func (l *Logger) Field(k string, v interface{}) *Logger { + l.lock.Lock() + defer l.lock.Unlock() -// SetLevelAsString enables changing the minimum level for a logger instance. -func (l *Logger) SetLevelAsString(lvl string) *Logger { - l.SetLevel(message.Levels[strings.ToUpper(lvl)]) + l.fields[k] = toString(v) return l } -// SetLevel enables changing the minimum level for a logger instance. -func (l *Logger) SetLevel(lvl message.Level) *Logger { - l.min = lvl +// Fields enables setting or changing the default fields for a logger instance. +func (l *Logger) Fields(args ...interface{}) *Logger { + l.lock.Lock() + defer l.lock.Unlock() + + if len(args)%2 != 0 { + args = append(args, "") + } + for i := 0; i < len(args); i += 2 { + l.fields[toString(args[i])] = toString(args[i+1]) + } return l } -// Field enables changing the default fields for a logger instance. -func (l *Logger) Field(k string, v interface{}) *Logger { +// FieldMap enables setting or changing the default fields for a logger instance. +func (l *Logger) FieldMap(f map[string]interface{}) *Logger { l.lock.Lock() defer l.lock.Unlock() - l.fields[k] = v + for k, v := range f { + l.fields[k] = toString(v) + } return l } |
