@@ -58,58 +58,64 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
58
58
ctx , cancel := context .WithCancel (inv .Context ())
59
59
defer cancel ()
60
60
61
- ignorePorts := map [int ]string {}
61
+ var (
62
+ ignorePorts = map [int ]string {}
63
+ isLinux = runtime .GOOS == "linux"
62
64
63
- isLinux := runtime .GOOS == "linux"
65
+ sinks = []slog.Sink {}
66
+ logClosers = []func () error {}
67
+ )
68
+ defer func () {
69
+ for _ , closer := range logClosers {
70
+ _ = closer ()
71
+ }
72
+ }()
73
+
74
+ addSinkIfProvided := func (sinkFn func (io.Writer ) slog.Sink , loc string ) error {
75
+ switch loc {
76
+ case "" :
77
+ // Do nothing.
78
+
79
+ case "/dev/stderr" :
80
+ sinks = append (sinks , sinkFn (inv .Stderr ))
81
+
82
+ case "/dev/stdout" :
83
+ sinks = append (sinks , sinkFn (inv .Stdout ))
84
+
85
+ default :
86
+ fi , err := os .OpenFile (loc , os .O_WRONLY | os .O_CREATE | os .O_APPEND , 0o644 )
87
+ if err != nil {
88
+ return xerrors .Errorf ("open log file %q: %w" , loc , err )
89
+ }
90
+ sinks = append (sinks , sinkFn (fi ))
91
+ logClosers = append (logClosers , fi .Close )
92
+ }
93
+ return nil
94
+ }
95
+
96
+ if err := addSinkIfProvided (sloghuman .Sink , slogHumanPath ); err != nil {
97
+ return xerrors .Errorf ("add human sink: %w" , err )
98
+ }
99
+ if err := addSinkIfProvided (slogjson .Sink , slogJSONPath ); err != nil {
100
+ return xerrors .Errorf ("add json sink: %w" , err )
101
+ }
102
+ if err := addSinkIfProvided (slogstackdriver .Sink , slogStackdriverPath ); err != nil {
103
+ return xerrors .Errorf ("add stackdriver sink: %w" , err )
104
+ }
64
105
65
106
// Spawn a reaper so that we don't accumulate a ton
66
107
// of zombie processes.
67
108
if reaper .IsInitProcess () && ! noReap && isLinux {
68
109
logWriter := & lumberjack.Logger {
69
110
Filename : filepath .Join (logDir , "coder-agent-init.log" ),
70
111
MaxSize : 5 , // MB
112
+ // Without this, rotated logs will never be deleted.
113
+ MaxBackups : 1 ,
71
114
}
72
115
defer logWriter .Close ()
73
116
74
- sinks := []slog.Sink {sloghuman .Sink (logWriter )}
75
- closers := []func () error {}
76
- addSinkIfProvided := func (sinkFn func (io.Writer ) slog.Sink , loc string ) error {
77
- switch loc {
78
- case "" :
79
-
80
- case "/dev/stdout" :
81
- sinks = append (sinks , sinkFn (inv .Stdout ))
82
-
83
- case "/dev/stderr" :
84
- sinks = append (sinks , sinkFn (inv .Stderr ))
85
-
86
- default :
87
- fi , err := os .OpenFile (loc , os .O_WRONLY | os .O_CREATE | os .O_APPEND , 0o644 )
88
- if err != nil {
89
- return xerrors .Errorf ("open log file %q: %w" , loc , err )
90
- }
91
- closers = append (closers , fi .Close )
92
- sinks = append (sinks , sinkFn (fi ))
93
- }
94
- return nil
95
- }
96
-
97
- if err := addSinkIfProvided (sloghuman .Sink , slogHumanPath ); err != nil {
98
- return xerrors .Errorf ("add human sink: %w" , err )
99
- }
100
- if err := addSinkIfProvided (slogjson .Sink , slogJSONPath ); err != nil {
101
- return xerrors .Errorf ("add json sink: %w" , err )
102
- }
103
- if err := addSinkIfProvided (slogstackdriver .Sink , slogStackdriverPath ); err != nil {
104
- return xerrors .Errorf ("add stackdriver sink: %w" , err )
105
- }
106
-
117
+ sinks = append (sinks , sloghuman .Sink (logWriter ))
107
118
logger := slog .Make (sinks ... ).Leveled (slog .LevelDebug )
108
- defer func () {
109
- for _ , closer := range closers {
110
- _ = closer ()
111
- }
112
- }()
113
119
114
120
logger .Info (ctx , "spawning reaper process" )
115
121
// Do not start a reaper on the child process. It's important
@@ -146,12 +152,15 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
146
152
ljLogger := & lumberjack.Logger {
147
153
Filename : filepath .Join (logDir , "coder-agent.log" ),
148
154
MaxSize : 5 , // MB
155
+ // Without this, rotated logs will never be deleted.
156
+ MaxBackups : 1 ,
149
157
}
150
158
defer ljLogger .Close ()
151
159
logWriter := & closeWriter {w : ljLogger }
152
160
defer logWriter .Close ()
153
161
154
- logger := slog .Make (sloghuman .Sink (inv .Stderr ), sloghuman .Sink (logWriter )).Leveled (slog .LevelDebug )
162
+ sinks = append (sinks , sloghuman .Sink (logWriter ))
163
+ logger := slog .Make (sinks ... ).Leveled (slog .LevelDebug )
155
164
156
165
version := buildinfo .Version ()
157
166
logger .Info (ctx , "starting agent" ,
0 commit comments