Skip to content

Commit edccd2d

Browse files
authored
fix(agent): configure logger for both reaper and agent (#7823)
1 parent 97fb502 commit edccd2d

File tree

1 file changed

+46
-41
lines changed

1 file changed

+46
-41
lines changed

cli/agent.go

+46-41
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,50 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
5858
ctx, cancel := context.WithCancel(inv.Context())
5959
defer cancel()
6060

61-
ignorePorts := map[int]string{}
61+
var (
62+
ignorePorts = map[int]string{}
63+
isLinux = runtime.GOOS == "linux"
6264

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+
}
64105

65106
// Spawn a reaper so that we don't accumulate a ton
66107
// of zombie processes.
@@ -73,45 +114,8 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
73114
}
74115
defer logWriter.Close()
75116

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))
109118
logger := slog.Make(sinks...).Leveled(slog.LevelDebug)
110-
defer func() {
111-
for _, closer := range closers {
112-
_ = closer()
113-
}
114-
}()
115119

116120
logger.Info(ctx, "spawning reaper process")
117121
// Do not start a reaper on the child process. It's important
@@ -155,7 +159,8 @@ func (r *RootCmd) workspaceAgent() *clibase.Cmd {
155159
logWriter := &closeWriter{w: ljLogger}
156160
defer logWriter.Close()
157161

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)
159164

160165
version := buildinfo.Version()
161166
logger.Info(ctx, "starting agent",

0 commit comments

Comments
 (0)