Skip to content

Commit 764c45b

Browse files
author
e_forbes
committed
add an error message if failure to configure logger and assert we don't drop logs
1 parent d4ca8c3 commit 764c45b

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

internal/logger/logger.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ func ConfigureLogger(cfg *config.Config) io.Closer {
2828
logger, logCloser, err := v2log.NewWithFile(cfg.LogFile, logConfig)
2929
slog.SetDefault(logger)
3030
if err != nil {
31+
fmt.Fprintf(os.Stderr, "failed to configure log file %q: %v\n", cfg.LogFile, err)
3132
return nil
3233
}
3334

internal/logger/logger_test.go

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package logger
22

33
import (
4+
"bytes"
45
"io"
56
"log/slog"
67
"os"
78
"regexp"
89
"testing"
910

11+
"github.com/stretchr/testify/assert"
1012
"github.com/stretchr/testify/require"
1113
"gitlab.com/gitlab-org/labkit/log"
1214

@@ -61,7 +63,6 @@ func TestConfigureWithPermissionError(t *testing.T) {
6163
LogFile: tempDir,
6264
LogFormat: "json",
6365
}
64-
6566
closer := Configure(&config)
6667
defer MustClose(t, closer)
6768

@@ -130,3 +131,32 @@ func TestConfigureLabkitV2Log(t *testing.T) {
130131
func MustClose(tb testing.TB, closer io.Closer) {
131132
require.NoError(tb, closer.Close())
132133
}
134+
135+
func TestConfigureLoggerDirectoryFailure(t *testing.T) {
136+
tempDir := t.TempDir()
137+
138+
config := config.Config{
139+
LogFile: tempDir,
140+
LogFormat: "json",
141+
}
142+
143+
fileInfo, err := os.Stat(tempDir)
144+
require.Nil(t, err)
145+
assert.True(t, fileInfo.IsDir())
146+
147+
old := os.Stderr
148+
r, w, _ := os.Pipe()
149+
os.Stderr = w
150+
151+
closer := ConfigureLogger(&config)
152+
assert.Nil(t, closer)
153+
slog.Info("this is a test")
154+
155+
w.Close()
156+
var buf bytes.Buffer
157+
io.Copy(&buf, r)
158+
os.Stderr = old
159+
160+
assert.Contains(t, buf.String(), "failed to configure log file", "capture the error in stderr")
161+
assert.Contains(t, buf.String(), "this is a test", "we should still be logging to stderr in this case")
162+
}

0 commit comments

Comments
 (0)