mirror of
https://github.com/coder/coder.git
synced 2025-07-29 10:35:52 +00:00
fix(cli/agent): wrap lumberjack logger to prevent re-open (#8229)
This commit is contained in:
committed by
GitHub
parent
6d176aee5d
commit
b4751c72d8
22
cli/agent.go
22
cli/agent.go
@@ -106,12 +106,12 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
|
|||||||
// Spawn a reaper so that we don't accumulate a ton
|
// Spawn a reaper so that we don't accumulate a ton
|
||||||
// of zombie processes.
|
// of zombie processes.
|
||||||
if reaper.IsInitProcess() && !noReap && isLinux {
|
if reaper.IsInitProcess() && !noReap && isLinux {
|
||||||
logWriter := &lumberjack.Logger{
|
logWriter := &lumberjackWriteCloseFixer{w: &lumberjack.Logger{
|
||||||
Filename: filepath.Join(logDir, "coder-agent-init.log"),
|
Filename: filepath.Join(logDir, "coder-agent-init.log"),
|
||||||
MaxSize: 5, // MB
|
MaxSize: 5, // MB
|
||||||
// Without this, rotated logs will never be deleted.
|
// Without this, rotated logs will never be deleted.
|
||||||
MaxBackups: 1,
|
MaxBackups: 1,
|
||||||
}
|
}}
|
||||||
defer logWriter.Close()
|
defer logWriter.Close()
|
||||||
|
|
||||||
sinks = append(sinks, sloghuman.Sink(logWriter))
|
sinks = append(sinks, sloghuman.Sink(logWriter))
|
||||||
@@ -149,14 +149,12 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
|
|||||||
// reaper.
|
// reaper.
|
||||||
go DumpHandler(ctx)
|
go DumpHandler(ctx)
|
||||||
|
|
||||||
ljLogger := &lumberjack.Logger{
|
logWriter := &lumberjackWriteCloseFixer{w: &lumberjack.Logger{
|
||||||
Filename: filepath.Join(logDir, "coder-agent.log"),
|
Filename: filepath.Join(logDir, "coder-agent.log"),
|
||||||
MaxSize: 5, // MB
|
MaxSize: 5, // MB
|
||||||
// Without this, rotated logs will never be deleted.
|
// Without this, rotated logs will never be deleted.
|
||||||
MaxBackups: 1,
|
MaxBackups: 1,
|
||||||
}
|
}}
|
||||||
defer ljLogger.Close()
|
|
||||||
logWriter := &closeWriter{w: ljLogger}
|
|
||||||
defer logWriter.Close()
|
defer logWriter.Close()
|
||||||
|
|
||||||
sinks = append(sinks, sloghuman.Sink(logWriter))
|
sinks = append(sinks, sloghuman.Sink(logWriter))
|
||||||
@@ -403,16 +401,16 @@ func ServeHandler(ctx context.Context, logger slog.Logger, handler http.Handler,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// closeWriter is a wrapper around an io.WriteCloser that prevents
|
// lumberjackWriteCloseFixer is a wrapper around an io.WriteCloser that
|
||||||
// writes after Close. This is necessary because lumberjack will
|
// prevents writes after Close. This is necessary because lumberjack
|
||||||
// re-open the file on write.
|
// re-opens the file on Write.
|
||||||
type closeWriter struct {
|
type lumberjackWriteCloseFixer struct {
|
||||||
w io.WriteCloser
|
w io.WriteCloser
|
||||||
mu sync.Mutex // Protects following.
|
mu sync.Mutex // Protects following.
|
||||||
closed bool
|
closed bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *closeWriter) Close() error {
|
func (c *lumberjackWriteCloseFixer) Close() error {
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
defer c.mu.Unlock()
|
defer c.mu.Unlock()
|
||||||
|
|
||||||
@@ -420,7 +418,7 @@ func (c *closeWriter) Close() error {
|
|||||||
return c.w.Close()
|
return c.w.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *closeWriter) Write(p []byte) (int, error) {
|
func (c *lumberjackWriteCloseFixer) Write(p []byte) (int, error) {
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
defer c.mu.Unlock()
|
defer c.mu.Unlock()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user