logger improvements

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
Василий Толстов 2020-11-10 22:18:16 +03:00
parent 81649d51e1
commit 6dc7e792c8
3 changed files with 120 additions and 37 deletions

View File

@ -17,43 +17,79 @@ type Logger interface {
// Fields set fields to always be logged // Fields set fields to always be logged
Fields(fields map[string]interface{}) Logger Fields(fields map[string]interface{}) Logger
// Info level message // Info level message
Info(msg string, args ...interface{}) Info(args ...interface{})
// Trace level message // Trace level message
Trace(msg string, args ...interface{}) Trace(args ...interface{})
// Debug level message // Debug level message
Debug(msg string, args ...interface{}) Debug(args ...interface{})
// Warn level message // Warn level message
Warn(msg string, args ...interface{}) Warn(args ...interface{})
// Error level message // Error level message
Error(msg string, args ...interface{}) Error(args ...interface{})
// Fatal level message // Fatal level message
Fatal(msg string, args ...interface{}) Fatal(args ...interface{})
// Infof level message
Infof(msg string, args ...interface{})
// Tracef level message
Tracef(msg string, args ...interface{})
// Debug level message
Debugf(msg string, args ...interface{})
// Warn level message
Warnf(msg string, args ...interface{})
// Error level message
Errorf(msg string, args ...interface{})
// Fatal level message
Fatalf(msg string, args ...interface{})
// String returns the name of logger // String returns the name of logger
String() string String() string
} }
func Info(msg string, args ...interface{}) { func Info(args ...interface{}) {
DefaultLogger.Info(msg, args...) DefaultLogger.Info(args...)
} }
func Error(msg string, args ...interface{}) { func Error(args ...interface{}) {
DefaultLogger.Error(msg, args...) DefaultLogger.Error(args...)
} }
func Debug(msg string, args ...interface{}) { func Debug(args ...interface{}) {
DefaultLogger.Debug(msg, args...) DefaultLogger.Debug(args...)
} }
func Warn(msg string, args ...interface{}) { func Warn(args ...interface{}) {
DefaultLogger.Warn(msg, args...) DefaultLogger.Warn(args...)
} }
func Trace(msg string, args ...interface{}) { func Trace(args ...interface{}) {
DefaultLogger.Trace(msg, args...) DefaultLogger.Trace(args...)
} }
func Fatal(msg string, args ...interface{}) { func Fatal(args ...interface{}) {
DefaultLogger.Fatal(msg, args...) DefaultLogger.Fatal(args...)
}
func Infof(msg string, args ...interface{}) {
DefaultLogger.Infof(msg, args...)
}
func Errorf(msg string, args ...interface{}) {
DefaultLogger.Errorf(msg, args...)
}
func Debugf(msg string, args ...interface{}) {
DefaultLogger.Debugf(msg, args...)
}
func Warnf(msg string, args ...interface{}) {
DefaultLogger.Warnf(msg, args...)
}
func Tracef(msg string, args ...interface{}) {
DefaultLogger.Tracef(msg, args...)
}
func Fatalf(msg string, args ...interface{}) {
DefaultLogger.Fatalf(msg, args...)
} }
func V(level Level) bool { func V(level Level) bool {

View File

@ -12,4 +12,5 @@ func TestLogger(t *testing.T) {
l.Trace("trace_msg1") l.Trace("trace_msg1")
l.Warn("warn_msg1") l.Warn("warn_msg1")
l.Fields(map[string]interface{}{"error": "test"}).Info("error message") l.Fields(map[string]interface{}{"error": "test"}).Info("error message")
l.Warn("first", " ", "second")
} }

View File

@ -84,32 +84,80 @@ func logCallerfilePath(loggingFilePath string) string {
return loggingFilePath[idx+1:] return loggingFilePath[idx+1:]
} }
func (l *defaultLogger) Info(msg string, args ...interface{}) { func (l *defaultLogger) Info(args ...interface{}) {
l.log(InfoLevel, msg, args...) l.log(InfoLevel, args...)
} }
func (l *defaultLogger) Error(msg string, args ...interface{}) { func (l *defaultLogger) Error(args ...interface{}) {
l.log(ErrorLevel, msg, args...) l.log(ErrorLevel, args...)
} }
func (l *defaultLogger) Debug(msg string, args ...interface{}) { func (l *defaultLogger) Debug(args ...interface{}) {
l.log(DebugLevel, msg, args...) l.log(DebugLevel, args...)
} }
func (l *defaultLogger) Warn(msg string, args ...interface{}) { func (l *defaultLogger) Warn(args ...interface{}) {
l.log(WarnLevel, msg, args...) l.log(WarnLevel, args...)
} }
func (l *defaultLogger) Trace(msg string, args ...interface{}) { func (l *defaultLogger) Trace(args ...interface{}) {
l.log(TraceLevel, msg, args...) l.log(TraceLevel, args...)
} }
func (l *defaultLogger) Fatal(msg string, args ...interface{}) { func (l *defaultLogger) Fatal(args ...interface{}) {
l.log(FatalLevel, msg, args...) l.log(FatalLevel, args...)
os.Exit(1) os.Exit(1)
} }
func (l *defaultLogger) log(level Level, msg string, args ...interface{}) { func (l *defaultLogger) Infof(msg string, args ...interface{}) {
l.logf(InfoLevel, msg, args...)
}
func (l *defaultLogger) Errorf(msg string, args ...interface{}) {
l.logf(ErrorLevel, msg, args...)
}
func (l *defaultLogger) Debugf(msg string, args ...interface{}) {
l.logf(DebugLevel, msg, args...)
}
func (l *defaultLogger) Warnf(msg string, args ...interface{}) {
l.logf(WarnLevel, msg, args...)
}
func (l *defaultLogger) Tracef(msg string, args ...interface{}) {
l.logf(TraceLevel, msg, args...)
}
func (l *defaultLogger) Fatalf(msg string, args ...interface{}) {
l.logf(FatalLevel, msg, args...)
os.Exit(1)
}
func (l *defaultLogger) log(level Level, args ...interface{}) {
if !l.V(level) {
return
}
l.RLock()
fields := copyFields(l.opts.Fields)
l.RUnlock()
fields["level"] = level.String()
if _, file, line, ok := runtime.Caller(l.opts.CallerSkipCount); ok {
fields["caller"] = fmt.Sprintf("%s:%d", logCallerfilePath(file), line)
}
fields["timestamp"] = time.Now().Format("2006-01-02 15:04:05")
fields["msg"] = fmt.Sprint(args...)
l.RLock()
_ = l.enc.Encode(fields)
l.RUnlock()
}
func (l *defaultLogger) logf(level Level, msg string, args ...interface{}) {
if !l.V(level) { if !l.V(level) {
return return
} }
@ -125,13 +173,11 @@ func (l *defaultLogger) log(level Level, msg string, args ...interface{}) {
} }
fields["timestamp"] = time.Now().Format("2006-01-02 15:04:05") fields["timestamp"] = time.Now().Format("2006-01-02 15:04:05")
if len(msg) > 0 {
if len(args) > 0 { if len(args) > 0 {
fields["msg"] = fmt.Sprintf(msg, args...) fields["msg"] = fmt.Sprintf(msg, args...)
} else { } else {
fields["msg"] = msg fields["msg"] = msg
} }
}
l.RLock() l.RLock()
_ = l.enc.Encode(fields) _ = l.enc.Encode(fields)
l.RUnlock() l.RUnlock()