Skip to content

Commit b4751c7

Browse files
authored
fix(cli/agent): wrap lumberjack logger to prevent re-open (#8229)
1 parent 6d176ae commit b4751c7

File tree

1 file changed

+10
-12
lines changed

1 file changed

+10
-12
lines changed

cli/agent.go

+10-12
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,12 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
106106
// Spawn a reaper so that we don't accumulate a ton
107107
// of zombie processes.
108108
if reaper.IsInitProcess() && !noReap && isLinux {
109-
logWriter := &lumberjack.Logger{
109+
logWriter := &lumberjackWriteCloseFixer{w: &lumberjack.Logger{
110110
Filename: filepath.Join(logDir, "coder-agent-init.log"),
111111
MaxSize: 5, // MB
112112
// Without this, rotated logs will never be deleted.
113113
MaxBackups: 1,
114-
}
114+
}}
115115
defer logWriter.Close()
116116

117117
sinks = append(sinks, sloghuman.Sink(logWriter))
@@ -149,14 +149,12 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
149149
// reaper.
150150
go DumpHandler(ctx)
151151

152-
ljLogger := &lumberjack.Logger{
152+
logWriter := &lumberjackWriteCloseFixer{w: &lumberjack.Logger{
153153
Filename: filepath.Join(logDir, "coder-agent.log"),
154154
MaxSize: 5, // MB
155155
// Without this, rotated logs will never be deleted.
156156
MaxBackups: 1,
157-
}
158-
defer ljLogger.Close()
159-
logWriter := &closeWriter{w: ljLogger}
157+
}}
160158
defer logWriter.Close()
161159

162160
sinks = append(sinks, sloghuman.Sink(logWriter))
@@ -403,24 +401,24 @@ func ServeHandler(ctx context.Context, logger slog.Logger, handler http.Handler,
403401
}
404402
}
405403

406-
// closeWriter is a wrapper around an io.WriteCloser that prevents
407-
// writes after Close. This is necessary because lumberjack will
408-
// re-open the file on write.
409-
type closeWriter struct {
404+
// lumberjackWriteCloseFixer is a wrapper around an io.WriteCloser that
405+
// prevents writes after Close. This is necessary because lumberjack
406+
// re-opens the file on Write.
407+
type lumberjackWriteCloseFixer struct {
410408
w io.WriteCloser
411409
mu sync.Mutex // Protects following.
412410
closed bool
413411
}
414412

415-
func (c *closeWriter) Close() error {
413+
func (c *lumberjackWriteCloseFixer) Close() error {
416414
c.mu.Lock()
417415
defer c.mu.Unlock()
418416

419417
c.closed = true
420418
return c.w.Close()
421419
}
422420

423-
func (c *closeWriter) Write(p []byte) (int, error) {
421+
func (c *lumberjackWriteCloseFixer) Write(p []byte) (int, error) {
424422
c.mu.Lock()
425423
defer c.mu.Unlock()
426424

0 commit comments

Comments
 (0)