Merge pull request #34 from shuhaowu/chained-with-fields
Added support to chain withfields
diff --git a/entry.go b/entry.go
index 8cd312e..08cc15f 100644
--- a/entry.go
+++ b/entry.go
@@ -38,15 +38,18 @@
}
func (entry *Entry) WithField(key string, value interface{}) *Entry {
- entry.Data[key] = value
- return entry
+ return entry.WithFields(Fields{key: value})
}
func (entry *Entry) WithFields(fields Fields) *Entry {
- for key, value := range fields {
- entry.WithField(key, value)
+ data := Fields{}
+ for k, v := range entry.Data {
+ data[k] = v
}
- return entry
+ for k, v := range fields {
+ data[k] = v
+ }
+ return &Entry{Logger: entry.Logger, Data: data}
}
func (entry *Entry) log(level string, levelInt Level, msg string) string {
diff --git a/logrus_test.go b/logrus_test.go
index 96a66a2..82187ae 100644
--- a/logrus_test.go
+++ b/logrus_test.go
@@ -98,3 +98,33 @@
assert.Equal(t, fields["msg"], "testtest")
})
}
+
+func TestWithFieldsShouldAllowAssignments(t *testing.T) {
+ var buffer bytes.Buffer
+ var fields Fields
+
+ logger := New()
+ logger.Out = &buffer
+ logger.Formatter = new(JSONFormatter)
+
+ localLog := logger.WithFields(Fields{
+ "key1": "value1",
+ })
+
+ localLog.WithField("key2", "value2").Info("test")
+ err := json.Unmarshal(buffer.Bytes(), &fields)
+ assert.Nil(t, err)
+
+ assert.Equal(t, "value2", fields["key2"])
+ assert.Equal(t, "value1", fields["key1"])
+
+ buffer = bytes.Buffer{}
+ fields = Fields{}
+ localLog.Info("test")
+ err = json.Unmarshal(buffer.Bytes(), &fields)
+ assert.Nil(t, err)
+
+ _, ok := fields["key2"]
+ assert.Equal(t, false, ok)
+ assert.Equal(t, "value1", fields["key1"])
+}