Skip to content

Commit 6512809

Browse files
authored
[logs] Add a file logger which only logs to a file (#477)
<!-- Copyright (C) 2020-2022 Arm Limited or its affiliates and Contributors. All rights reserved. SPDX-License-Identifier: Apache-2.0 --> ### Description - extend the current file logger not to log to stderr or stdout ### Test Coverage <!-- Please put an `x` in the correct box e.g. `[x]` to indicate the testing coverage of this change. --> - [ ] This change is covered by existing or additional automated tests. - [ ] Manual testing has been performed (and evidence provided) as automated testing was not feasible. - [x] Additional tests are not required for this change (e.g. documentation update).
1 parent a02d246 commit 6512809

File tree

4 files changed

+54
-24
lines changed

4 files changed

+54
-24
lines changed

changes/20240613181738.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
:sparkles: `[logs]` Add a way to use a `Loggers` as a plain `logr.Logger`

changes/20240614163145.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
:sparkles: `[logs]` Add a file logger which only logs to a file

utils/logs/file_logger.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,22 @@
55

66
package logs
77

8-
import "github.com/sirupsen/logrus"
8+
import (
9+
"io"
910

10-
// NewFileLogger creates a logger to a file
11+
"github.com/sirupsen/logrus"
12+
)
13+
14+
// NewFileLogger creates a logger to a file.
1115
func NewFileLogger(logFile string, loggerSource string) (loggers Loggers, err error) {
1216
return NewLogrusLoggerWithFileHook(logrus.New(), loggerSource, logFile)
17+
}
1318

19+
// NewFileOnlyLogger creates a logger to a file such as NewFileLogger but logs are only sent to a file and will not be printed to StdErr or StdOut.
20+
func NewFileOnlyLogger(logFile string, loggerSource string) (loggers Loggers, err error) {
21+
underlying := logrus.New()
22+
underlying.SetOutput(io.Discard)
23+
return NewLogrusLoggerWithFileHook(underlying, loggerSource, logFile)
1424
}
1525

1626
// CreateFileLogger creates a logger to a file

utils/logs/file_logger_test.go

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package logs
66

77
import (
8+
"fmt"
89
"testing"
910

1011
"github.com/stretchr/testify/assert"
@@ -14,27 +15,44 @@ import (
1415
)
1516

1617
func TestFileLogger(t *testing.T) {
17-
file, err := filesystem.TempFileInTempDir("test-filelog-*.log")
18-
require.NoError(t, err)
18+
var tests = []struct {
19+
loggerCreationFunc func(path string) (Loggers, error)
20+
}{
21+
{
22+
loggerCreationFunc: func(path string) (Loggers, error) { return NewFileLogger(path, "Test") },
23+
},
24+
{
25+
loggerCreationFunc: func(path string) (Loggers, error) { return NewFileOnlyLogger(path, "Test") },
26+
},
27+
}
28+
for i := range tests {
29+
test := tests[i]
30+
t.Run(fmt.Sprintf("logger %v", i), func(t *testing.T) {
31+
file, err := filesystem.TouchTempFileInTempDir("test-filelog-*.log")
32+
require.NoError(t, err)
33+
34+
defer func() { _ = filesystem.Rm(file) }()
35+
36+
empty, err := filesystem.IsEmpty(file)
37+
require.NoError(t, err)
38+
assert.True(t, empty)
39+
40+
loggers, err := test.loggerCreationFunc(file)
41+
require.NoError(t, err)
42+
43+
testLog(t, loggers)
44+
45+
empty, err = filesystem.IsEmpty(file)
46+
require.NoError(t, err)
47+
assert.False(t, empty)
48+
49+
content, err := filesystem.ReadFile(file)
50+
require.NoError(t, err)
51+
fmt.Println(string(content))
52+
53+
err = filesystem.Rm(file)
54+
require.NoError(t, err)
55+
})
56+
}
1957

20-
err = file.Close()
21-
require.NoError(t, err)
22-
23-
defer func() { _ = filesystem.Rm(file.Name()) }()
24-
25-
empty, err := filesystem.IsEmpty(file.Name())
26-
require.NoError(t, err)
27-
assert.True(t, empty)
28-
29-
loggers, err := NewFileLogger(file.Name(), "Test")
30-
require.NoError(t, err)
31-
32-
testLog(t, loggers)
33-
34-
empty, err = filesystem.IsEmpty(file.Name())
35-
require.NoError(t, err)
36-
assert.False(t, empty)
37-
38-
err = filesystem.Rm(file.Name())
39-
require.NoError(t, err)
4058
}

0 commit comments

Comments
 (0)