From d1f5c592be2fb25c64cb679597b91f0d82b3f5ce Mon Sep 17 00:00:00 2001 From: Jonathan Yu Date: Thu, 2 Sep 2021 01:38:54 +0000 Subject: [PATCH 1/3] feat: write agent output to a temporary file --- internal/cmd/agent.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/internal/cmd/agent.go b/internal/cmd/agent.go index 14bd11ab..f75534b9 100644 --- a/internal/cmd/agent.go +++ b/internal/cmd/agent.go @@ -4,12 +4,14 @@ import ( "net/url" "os" "os/signal" + "path/filepath" "syscall" // We use slog here since agent runs in the background and we can benefit // from structured logging. "cdr.dev/slog" "cdr.dev/slog/sloggers/sloghuman" + "cdr.dev/slog/sloggers/slogjson" "github.com/spf13/cobra" "golang.org/x/xerrors" @@ -48,10 +50,17 @@ coder agent start coder agent start --coder-url https://my-coder.com --token xxxx-xxxx `, RunE: func(cmd *cobra.Command, args []string) error { - var ( - ctx = cmd.Context() - log = slog.Make(sloghuman.Sink(os.Stderr)).Leveled(slog.LevelDebug) - ) + ctx := cmd.Context() + sinks := []slog.Sink{ + sloghuman.Sink(os.Stderr), + } + + file, err := os.OpenFile(filepath.Join(os.TempDir(), "coder-agent.log"), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600) + if err == nil && file != nil { + sinks = append(sinks, slogjson.Sink(file)) + } + + log := slog.Make(sinks...).Leveled(slog.LevelDebug) if coderURL == "" { var ok bool coderURL, ok = os.LookupEnv("CODER_URL") From e6203dc0a246e2fe0de09664b90961a724418c80 Mon Sep 17 00:00:00 2001 From: Jonathan Yu Date: Thu, 2 Sep 2021 01:40:54 +0000 Subject: [PATCH 2/3] add log if file cannot be opened --- internal/cmd/agent.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/cmd/agent.go b/internal/cmd/agent.go index f75534b9..9296f016 100644 --- a/internal/cmd/agent.go +++ b/internal/cmd/agent.go @@ -61,6 +61,9 @@ coder agent start --coder-url https://my-coder.com --token xxxx-xxxx } log := slog.Make(sinks...).Leveled(slog.LevelDebug) + if err != nil { + log.Info(ctx, "failed to open agent log file", slog.Error(err)) + } if coderURL == "" { var ok bool coderURL, ok = os.LookupEnv("CODER_URL") From c31dbd852ce5be67cc0c36f2674b95dea8a44471 Mon Sep 17 00:00:00 2001 From: Jonathan Yu Date: Thu, 2 Sep 2021 15:22:47 +0000 Subject: [PATCH 3/3] code review: switch to sloghuman --- internal/cmd/agent.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/cmd/agent.go b/internal/cmd/agent.go index 9296f016..24e61874 100644 --- a/internal/cmd/agent.go +++ b/internal/cmd/agent.go @@ -11,7 +11,6 @@ import ( // from structured logging. "cdr.dev/slog" "cdr.dev/slog/sloggers/sloghuman" - "cdr.dev/slog/sloggers/slogjson" "github.com/spf13/cobra" "golang.org/x/xerrors" @@ -57,7 +56,7 @@ coder agent start --coder-url https://my-coder.com --token xxxx-xxxx file, err := os.OpenFile(filepath.Join(os.TempDir(), "coder-agent.log"), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600) if err == nil && file != nil { - sinks = append(sinks, slogjson.Sink(file)) + sinks = append(sinks, sloghuman.Sink(file)) } log := slog.Make(sinks...).Leveled(slog.LevelDebug)