Skip to content

Commit d6442db

Browse files
authored
feat(cli): rotate file logs for coderd (coder#15438)
Related to coder#15309 As we already are doing for agent logs - this PR is enabling the logs rotation for coderd logs. Currently keeping the same logic than we had for agent - with 5MB as the file size for rotation.
1 parent 56e219b commit d6442db

File tree

2 files changed

+8
-32
lines changed

2 files changed

+8
-32
lines changed

cli/clilog/clilog.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import (
44
"context"
55
"fmt"
66
"io"
7-
"os"
87
"regexp"
98
"strings"
109

1110
"golang.org/x/xerrors"
11+
"gopkg.in/natefinch/lumberjack.v2"
1212

1313
"cdr.dev/slog"
1414
"cdr.dev/slog/sloggers/sloghuman"
@@ -104,20 +104,21 @@ func (b *Builder) Build(inv *serpent.Invocation) (log slog.Logger, closeLog func
104104
addSinkIfProvided := func(sinkFn func(io.Writer) slog.Sink, loc string) error {
105105
switch loc {
106106
case "":
107-
108107
case "/dev/stdout":
109108
sinks = append(sinks, sinkFn(inv.Stdout))
110109

111110
case "/dev/stderr":
112111
sinks = append(sinks, sinkFn(inv.Stderr))
113112

114113
default:
115-
fi, err := os.OpenFile(loc, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0o644)
116-
if err != nil {
117-
return xerrors.Errorf("open log file %q: %w", loc, err)
114+
logWriter := &lumberjack.Logger{
115+
Filename: loc,
116+
MaxSize: 5, // MB
117+
// Without this, rotated logs will never be deleted.
118+
MaxBackups: 1,
118119
}
119-
closers = append(closers, fi.Close)
120-
sinks = append(sinks, sinkFn(fi))
120+
closers = append(closers, logWriter.Close)
121+
sinks = append(sinks, sinkFn(logWriter))
121122
}
122123
return nil
123124
}

cli/clilog/clilog_test.go

-25
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package clilog_test
22

33
import (
44
"encoding/json"
5-
"io/fs"
65
"os"
76
"path/filepath"
87
"strings"
@@ -145,30 +144,6 @@ func TestBuilder(t *testing.T) {
145144
assertLogsJSON(t, tempJSON, info, infoLog, warn, warnLog)
146145
})
147146
})
148-
149-
t.Run("NotFound", func(t *testing.T) {
150-
t.Parallel()
151-
152-
tempFile := filepath.Join(t.TempDir(), "doesnotexist", "test.log")
153-
cmd := &serpent.Command{
154-
Use: "test",
155-
Handler: func(inv *serpent.Invocation) error {
156-
logger, closeLog, err := clilog.New(
157-
clilog.WithFilter("foo", "baz"),
158-
clilog.WithHuman(tempFile),
159-
clilog.WithVerbose(),
160-
).Build(inv)
161-
if err != nil {
162-
return err
163-
}
164-
defer closeLog()
165-
logger.Error(inv.Context(), "you will never see this")
166-
return nil
167-
},
168-
}
169-
err := cmd.Invoke().Run()
170-
require.ErrorIs(t, err, fs.ErrNotExist)
171-
})
172147
}
173148

174149
var (

0 commit comments

Comments
 (0)