Skip to content

Commit fa05a6c

Browse files
🐛 Make sure that loggers added in NewMultipleLoggers don't fail with 'No Logger Source' (#451)
<!-- Copyright (C) 2020-2022 Arm Limited or its affiliates and Contributors. All rights reserved. SPDX-License-Identifier: Apache-2.0 --> ### Description <!-- Please add any detail or context that would be useful to a reviewer. --> Make sure that loggers added in NewMultipleLoggers don't fail with 'No Logger Source'. NewMultipleLoggers calls Append to add the loggers, this tries to call c.setLoggerSource but at this point the base logger hasn't had it's source set. This change makes sure that the source is set earlier in the process. It also adds a test that initialises the loggers with NewMultipleLoggers as there wasn't a test which is why this problem was missed. ### Test Coverage <!-- Please put an `x` in the correct box e.g. `[x]` to indicate the testing coverage of this change. --> - [x] This change is covered by existing or additional automated tests. - [ ] Manual testing has been performed (and evidence provided) as automated testing was not feasible. - [ ] Additional tests are not required for this change (e.g. documentation update).
1 parent aff2012 commit fa05a6c

File tree

3 files changed

+92
-62
lines changed

3 files changed

+92
-62
lines changed

changes/20240424131658.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
:bug: Make sure that loggers added in NewMultipleLoggers don't fail with 'No Logger Source'

utils/logs/multiple_logger.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,13 @@ func (c *MultipleLogger) setLoggerSource(source string) error {
5555
var err error
5656
for i := range c.loggers {
5757
err = c.loggers[i].SetLoggerSource(source)
58+
if err != nil {
59+
return err
60+
}
5861
}
59-
if err == nil {
60-
c.loggerSource = source
61-
}
62-
return err
62+
63+
c.loggerSource = source
64+
return nil
6365
}
6466

6567
func (c *MultipleLogger) Log(output ...interface{}) {
@@ -123,6 +125,12 @@ func NewMultipleLoggers(loggerSource string, loggersList ...Loggers) (l IMultipl
123125
err = commonerrors.ErrNoLoggerSource
124126
return
125127
}
128+
l = &MultipleLoggerWithLoggerSource{}
129+
err = l.SetLoggerSource(loggerSource)
130+
if err != nil {
131+
return
132+
}
133+
126134
list := loggersList
127135
if len(list) == 0 {
128136
std, err := NewStdLogger(loggerSource)
@@ -131,12 +139,7 @@ func NewMultipleLoggers(loggerSource string, loggersList ...Loggers) (l IMultipl
131139
}
132140
list = []Loggers{std}
133141
}
134-
l = &MultipleLoggerWithLoggerSource{}
135142
err = l.Append(list...)
136-
if err != nil {
137-
return
138-
}
139-
err = l.SetLoggerSource(loggerSource)
140143
return
141144
}
142145

utils/logs/multiple_logger_test.go

Lines changed: 79 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -37,74 +37,100 @@ func TestCombinedLogger(t *testing.T) {
3737
}
3838

3939
func TestMultipleLoggers(t *testing.T) {
40-
// With default logger
41-
loggers, err := NewMultipleLoggers("Test Multiple")
42-
require.NoError(t, err)
43-
testLog(t, loggers)
40+
t.Run("Manually add loggers", func(t *testing.T) {
41+
// With default logger
42+
loggers, err := NewMultipleLoggers("Test Multiple")
43+
require.NoError(t, err)
44+
testLog(t, loggers)
4445

45-
// Adding a file logger to the mix.
46-
file, err := filesystem.TempFileInTempDir("test-multiplelog-filelog-*.log")
47-
require.NoError(t, err)
46+
// Adding a file logger to the mix.
47+
file, err := filesystem.TempFileInTempDir("test-multiplelog-filelog-*.log")
48+
require.NoError(t, err)
4849

49-
err = file.Close()
50-
require.NoError(t, err)
50+
err = file.Close()
51+
require.NoError(t, err)
5152

52-
defer func() { _ = filesystem.Rm(file.Name()) }()
53+
defer func() { _ = filesystem.Rm(file.Name()) }()
5354

54-
empty, err := filesystem.IsEmpty(file.Name())
55-
require.NoError(t, err)
56-
assert.True(t, empty)
55+
empty, err := filesystem.IsEmpty(file.Name())
56+
require.NoError(t, err)
57+
assert.True(t, empty)
5758

58-
fl, err := NewFileLogger(file.Name(), "Test")
59-
require.NoError(t, err)
59+
fl, err := NewFileLogger(file.Name(), "Test")
60+
require.NoError(t, err)
6061

61-
require.NoError(t, loggers.Append(fl))
62+
require.NoError(t, loggers.Append(fl))
6263

63-
nl, err := NewNoopLogger("Test2")
64-
require.NoError(t, err)
64+
nl, err := NewNoopLogger("Test2")
65+
require.NoError(t, err)
6566

66-
// Adding various loggers
67-
require.NoError(t, loggers.Append(fl, nl))
67+
// Adding various loggers
68+
require.NoError(t, loggers.Append(fl, nl))
6869

69-
testLog(t, loggers)
70+
testLog(t, loggers)
7071

71-
empty, err = filesystem.IsEmpty(file.Name())
72-
require.NoError(t, err)
73-
assert.False(t, empty)
72+
empty, err = filesystem.IsEmpty(file.Name())
73+
require.NoError(t, err)
74+
assert.False(t, empty)
7475

75-
err = filesystem.Rm(file.Name())
76-
require.NoError(t, err)
76+
err = filesystem.Rm(file.Name())
77+
require.NoError(t, err)
7778

78-
// Concurrency test multiple loggers
79+
// Concurrency test multiple loggers
7980

80-
stdLogger, err := NewStdLogger("Test std logger")
81-
require.NoError(t, err)
81+
stdLogger, err := NewStdLogger("Test std logger")
82+
require.NoError(t, err)
8283

83-
stringLogger, err := NewPlainStringLogger()
84-
if err != nil {
85-
return
86-
}
87-
mLoggers, err := NewCombinedLoggers(stdLogger, stringLogger)
88-
if err != nil {
89-
return
90-
}
91-
92-
wg := sync.WaitGroup{}
93-
wg.Add(2)
94-
go func() {
95-
defer wg.Done()
96-
for i := 0; i < 100; i++ {
97-
mLoggers.Log(fmt.Sprintf("Test output %v", i))
84+
stringLogger, err := NewPlainStringLogger()
85+
if err != nil {
86+
return
9887
}
99-
}()
100-
go func() {
101-
defer wg.Done()
102-
for i := 0; i < 100; i++ {
103-
mLoggers.LogError(fmt.Sprintf("Test output %v", i))
88+
mLoggers, err := NewCombinedLoggers(stdLogger, stringLogger)
89+
if err != nil {
90+
return
10491
}
105-
}()
10692

107-
wg.Wait()
108-
err = loggers.Close()
109-
require.NoError(t, err)
93+
wg := sync.WaitGroup{}
94+
wg.Add(2)
95+
go func() {
96+
defer wg.Done()
97+
for i := 0; i < 100; i++ {
98+
mLoggers.Log(fmt.Sprintf("Test output %v", i))
99+
}
100+
}()
101+
go func() {
102+
defer wg.Done()
103+
for i := 0; i < 100; i++ {
104+
mLoggers.LogError(fmt.Sprintf("Test output %v", i))
105+
}
106+
}()
107+
108+
wg.Wait()
109+
err = loggers.Close()
110+
require.NoError(t, err)
111+
})
112+
113+
t.Run("Add loggers at start", func(t *testing.T) {
114+
file, err := filesystem.TempFileInTempDir("test-multiplelog-filelog-*.log")
115+
require.NoError(t, err)
116+
117+
err = file.Close()
118+
require.NoError(t, err)
119+
120+
defer func() { _ = filesystem.Rm(file.Name()) }()
121+
122+
empty, err := filesystem.IsEmpty(file.Name())
123+
require.NoError(t, err)
124+
assert.True(t, empty)
125+
126+
fl, err := NewFileLogger(file.Name(), "Test")
127+
require.NoError(t, err)
128+
129+
nl, err := NewNoopLogger("Test2")
130+
require.NoError(t, err)
131+
132+
loggers, err := NewMultipleLoggers("Test Multiple", fl, nl)
133+
require.NoError(t, err)
134+
testLog(t, loggers)
135+
})
110136
}

0 commit comments

Comments
 (0)