Skip to content

Commit d6442db

Browse files
authored
feat(cli): rotate file logs for coderd (#15438)
Related to #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

Lines changed: 8 additions & 7 deletions
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

Lines changed: 0 additions & 25 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy