@@ -58,9 +58,50 @@ 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.
@@ -73,45 +114,8 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
73
114
}
74
115
defer logWriter .Close ()
75
116
76
- sinks := []slog.Sink {sloghuman .Sink (logWriter )}
77
- closers := []func () error {}
78
- addSinkIfProvided := func (sinkFn func (io.Writer ) slog.Sink , loc string ) error {
79
- switch loc {
80
- case "" :
81
-
82
- case "/dev/stdout" :
83
- sinks = append (sinks , sinkFn (inv .Stdout ))
84
-
85
- case "/dev/stderr" :
86
- sinks = append (sinks , sinkFn (inv .Stderr ))
87
-
88
- default :
89
- fi , err := os .OpenFile (loc , os .O_WRONLY | os .O_CREATE | os .O_APPEND , 0o644 )
90
- if err != nil {
91
- return xerrors .Errorf ("open log file %q: %w" , loc , err )
92
- }
93
- closers = append (closers , fi .Close )
94
- sinks = append (sinks , sinkFn (fi ))
95
- }
96
- return nil
97
- }
98
-
99
- if err := addSinkIfProvided (sloghuman .Sink , slogHumanPath ); err != nil {
100
- return xerrors .Errorf ("add human sink: %w" , err )
101
- }
102
- if err := addSinkIfProvided (slogjson .Sink , slogJSONPath ); err != nil {
103
- return xerrors .Errorf ("add json sink: %w" , err )
104
- }
105
- if err := addSinkIfProvided (slogstackdriver .Sink , slogStackdriverPath ); err != nil {
106
- return xerrors .Errorf ("add stackdriver sink: %w" , err )
107
- }
108
-
117
+ sinks = append (sinks , sloghuman .Sink (logWriter ))
109
118
logger := slog .Make (sinks ... ).Leveled (slog .LevelDebug )
110
- defer func () {
111
- for _ , closer := range closers {
112
- _ = closer ()
113
- }
114
- }()
115
119
116
120
logger .Info (ctx , "spawning reaper process" )
117
121
// Do not start a reaper on the child process. It's important
@@ -155,7 +159,8 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
155
159
logWriter := & closeWriter {w : ljLogger }
156
160
defer logWriter .Close ()
157
161
158
- 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 )
159
164
160
165
version := buildinfo .Version ()
161
166
logger .Info (ctx , "starting agent" ,
0 commit comments