Skip to content

Commit 2f7ac8c

Browse files
authored
Merge pull request #149 from snabble/improve-with
Allow passing multiple objects to With
2 parents 21f1d9a + dd279a5 commit 2f7ac8c

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

logger.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ func (logger *Logger) WithFields(fields logrus.Fields) *Entry {
5454
return NewEntry(logger).WithFields(fields)
5555
}
5656

57-
func (logger *Logger) With(o Identifiable) *Entry {
58-
return NewEntry(logger).With(o)
57+
func (logger *Logger) With(os ...Identifiable) *Entry {
58+
return NewEntry(logger).With(os...)
5959
}
6060

6161
func (logger *Logger) WithTime(t time.Time) *Entry {
@@ -119,8 +119,17 @@ func (entry *Entry) WithFields(fields logrus.Fields) *Entry {
119119
return wrapEntry(entry.Entry.WithFields(fields))
120120
}
121121

122-
func (entry *Entry) With(o Identifiable) *Entry {
123-
return wrapEntry(entry.Entry.WithFields(o.LogIdentity()))
122+
func (entry *Entry) With(os ...Identifiable) *Entry {
123+
merged := map[string]any{}
124+
125+
for _, o := range os {
126+
fields := o.LogIdentity()
127+
for k, v := range fields {
128+
merged[k] = v
129+
}
130+
}
131+
132+
return wrapEntry(entry.Entry.WithFields(merged))
124133
}
125134

126135
func (entry *Entry) WithTime(t time.Time) *Entry {

logger_test.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,12 @@ func Test_Logger_WithError(t *testing.T) {
7171
a.Regexp(`^time.* level\=error msg\=oops error\="found an error: an error occurred"`, b.String())
7272
}
7373

74-
type identifiable struct{}
74+
type identifiable struct {
75+
value string
76+
}
7577

7678
func (i identifiable) LogIdentity() map[string]any {
77-
return map[string]any{"field": "value"}
79+
return map[string]any{"field": i.value}
7880
}
7981

8082
func Test_Logger_With(t *testing.T) {
@@ -84,10 +86,24 @@ func Test_Logger_With(t *testing.T) {
8486
logrusLogger.Out = &out
8587
logger := Logger{Logger: logrusLogger}
8688

87-
i := identifiable{}
89+
i := identifiable{value: "__value__"}
8890
logger.With(i).Info("message")
8991

90-
a.Contains(out.String(), "field=value")
92+
a.Contains(out.String(), "field=__value__")
93+
}
94+
95+
func Test_Logger_With_MergesMultipleObjects(t *testing.T) {
96+
a := assert.New(t)
97+
var out strings.Builder
98+
logrusLogger := logrus.New()
99+
logrusLogger.Out = &out
100+
logger := Logger{Logger: logrusLogger}
101+
102+
logger.
103+
With(identifiable{value: "__overwritten__"}, identifiable{value: "__value__"}).
104+
Info("message")
105+
106+
a.Contains(out.String(), "field=__value__")
91107
}
92108

93109
func Test_Logger_Call(t *testing.T) {

0 commit comments

Comments
 (0)