diff --git a/entry.go b/entry.go index c0f398f6f..b8889f44d 100644 --- a/entry.go +++ b/entry.go @@ -56,6 +56,14 @@ func (entry *Entry) String() (string, error) { return reader.String(), err } +// ToError returns the field value of ErrorKey (nil) +func (entry *Entry) ToError() error { + if err, ok := entry.Data[ErrorKey].(error); ok { + return err + } + return nil +} + // Add an error as single field (using the key defined in ErrorKey) to the Entry. func (entry *Entry) WithError(err error) *Entry { return entry.WithField(ErrorKey, err) @@ -112,36 +120,40 @@ func (entry *Entry) log(level Level, msg string) { } } -func (entry *Entry) Debug(args ...interface{}) { +func (entry *Entry) Debug(args ...interface{}) *Entry { if entry.Logger.Level >= DebugLevel { entry.log(DebugLevel, fmt.Sprint(args...)) } + return entry } -func (entry *Entry) Print(args ...interface{}) { - entry.Info(args...) +func (entry *Entry) Print(args ...interface{}) *Entry { + return entry.Info(args...) } -func (entry *Entry) Info(args ...interface{}) { +func (entry *Entry) Info(args ...interface{}) *Entry { if entry.Logger.Level >= InfoLevel { entry.log(InfoLevel, fmt.Sprint(args...)) } + return entry } -func (entry *Entry) Warn(args ...interface{}) { +func (entry *Entry) Warn(args ...interface{}) *Entry { if entry.Logger.Level >= WarnLevel { entry.log(WarnLevel, fmt.Sprint(args...)) } + return entry } -func (entry *Entry) Warning(args ...interface{}) { - entry.Warn(args...) +func (entry *Entry) Warning(args ...interface{}) *Entry { + return entry.Warn(args...) } -func (entry *Entry) Error(args ...interface{}) { +func (entry *Entry) Error(args ...interface{}) *Entry { if entry.Logger.Level >= ErrorLevel { entry.log(ErrorLevel, fmt.Sprint(args...)) } + return entry } func (entry *Entry) Fatal(args ...interface{}) { @@ -160,36 +172,40 @@ func (entry *Entry) Panic(args ...interface{}) { // Entry Printf family functions -func (entry *Entry) Debugf(format string, args ...interface{}) { +func (entry *Entry) Debugf(format string, args ...interface{}) *Entry { if entry.Logger.Level >= DebugLevel { entry.Debug(fmt.Sprintf(format, args...)) } + return entry } -func (entry *Entry) Infof(format string, args ...interface{}) { +func (entry *Entry) Infof(format string, args ...interface{}) *Entry { if entry.Logger.Level >= InfoLevel { entry.Info(fmt.Sprintf(format, args...)) } + return entry } -func (entry *Entry) Printf(format string, args ...interface{}) { - entry.Infof(format, args...) +func (entry *Entry) Printf(format string, args ...interface{}) *Entry { + return entry.Infof(format, args...) } -func (entry *Entry) Warnf(format string, args ...interface{}) { +func (entry *Entry) Warnf(format string, args ...interface{}) *Entry { if entry.Logger.Level >= WarnLevel { entry.Warn(fmt.Sprintf(format, args...)) } + return entry } -func (entry *Entry) Warningf(format string, args ...interface{}) { - entry.Warnf(format, args...) +func (entry *Entry) Warningf(format string, args ...interface{}) *Entry { + return entry.Warnf(format, args...) } -func (entry *Entry) Errorf(format string, args ...interface{}) { +func (entry *Entry) Errorf(format string, args ...interface{}) *Entry { if entry.Logger.Level >= ErrorLevel { entry.Error(fmt.Sprintf(format, args...)) } + return entry } func (entry *Entry) Fatalf(format string, args ...interface{}) { @@ -206,36 +222,40 @@ func (entry *Entry) Panicf(format string, args ...interface{}) { // Entry Println family functions -func (entry *Entry) Debugln(args ...interface{}) { +func (entry *Entry) Debugln(args ...interface{}) *Entry { if entry.Logger.Level >= DebugLevel { entry.Debug(entry.sprintlnn(args...)) } + return entry } -func (entry *Entry) Infoln(args ...interface{}) { +func (entry *Entry) Infoln(args ...interface{}) *Entry { if entry.Logger.Level >= InfoLevel { entry.Info(entry.sprintlnn(args...)) } + return entry } -func (entry *Entry) Println(args ...interface{}) { - entry.Infoln(args...) +func (entry *Entry) Println(args ...interface{}) *Entry { + return entry.Infoln(args...) } -func (entry *Entry) Warnln(args ...interface{}) { +func (entry *Entry) Warnln(args ...interface{}) *Entry { if entry.Logger.Level >= WarnLevel { entry.Warn(entry.sprintlnn(args...)) } + return entry } -func (entry *Entry) Warningln(args ...interface{}) { - entry.Warnln(args...) +func (entry *Entry) Warningln(args ...interface{}) *Entry { + return entry.Warnln(args...) } -func (entry *Entry) Errorln(args ...interface{}) { +func (entry *Entry) Errorln(args ...interface{}) *Entry { if entry.Logger.Level >= ErrorLevel { entry.Error(entry.sprintlnn(args...)) } + return entry } func (entry *Entry) Fatalln(args ...interface{}) { diff --git a/entry_test.go b/entry_test.go index 99c3b41d5..3473ffb66 100644 --- a/entry_test.go +++ b/entry_test.go @@ -8,6 +8,23 @@ import ( "github.com/stretchr/testify/assert" ) +var err = fmt.Errorf("kaboom at layer %d", 4711) + +func TestToError(t *testing.T) { + + assert := assert.New(t) + + ctx := WithField("foo", "bar") + assert.Equal(nil, ctx.Debug("Hello").ToError()) + + ctx.Data[ErrorKey] = "error" + assert.Equal(nil, ctx.Debug("Hello").ToError()) + + ctx = ctx.WithError(err) + assert.Equal(err, ctx.Debug("Hello").ToError()) + +} + func TestEntryWithError(t *testing.T) { assert := assert.New(t) @@ -16,8 +33,6 @@ func TestEntryWithError(t *testing.T) { ErrorKey = "error" }() - err := fmt.Errorf("kaboom at layer %d", 4711) - assert.Equal(err, WithError(err).Data["error"]) logger := New()