From a4be45f45537facd844fe3a24c05a9e38ee240a8 Mon Sep 17 00:00:00 2001 From: kylecarbs Date: Sat, 30 Apr 2022 04:41:54 +0000 Subject: [PATCH] fix: Write agent logs to "/tmp/coder-agent.log" for debugging It was difficult to obtain logs for the agent if it failed to start for some reason. Now they'll go to a consistent spot! --- agent/agent.go | 12 +++--------- cli/agent.go | 12 +++++++++++- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/agent/agent.go b/agent/agent.go index 2b7539f2ea44a..2577cf795d007 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -12,6 +12,7 @@ import ( "os" "os/exec" "os/user" + "path/filepath" "runtime" "strconv" "strings" @@ -21,7 +22,6 @@ import ( "github.com/armon/circbuf" "github.com/google/uuid" - gsyslog "github.com/hashicorp/go-syslog" "go.uber.org/atomic" "cdr.dev/slog" @@ -167,15 +167,9 @@ func (*agent) runStartupScript(ctx context.Context, script string) error { return xerrors.Errorf("get user shell: %w", err) } - var writer io.WriteCloser - // Attempt to use the syslog to write startup information. - writer, err = gsyslog.NewLogger(gsyslog.LOG_INFO, "USER", "coder-startup-script") + writer, err := os.OpenFile(filepath.Join(os.TempDir(), "coder-startup-script.log"), os.O_CREATE|os.O_RDWR, 0600) if err != nil { - // If the syslog isn't supported or cannot be created, use a text file in temp. - writer, err = os.CreateTemp("", "coder-startup-script.txt") - if err != nil { - return xerrors.Errorf("open startup script log file: %w", err) - } + return xerrors.Errorf("open startup script log file: %w", err) } defer func() { _ = writer.Close() diff --git a/cli/agent.go b/cli/agent.go index 754550b9384d4..2b9f70a044576 100644 --- a/cli/agent.go +++ b/cli/agent.go @@ -4,6 +4,8 @@ import ( "context" "net/http" "net/url" + "os" + "path/filepath" "time" "cloud.google.com/go/compute/metadata" @@ -37,7 +39,15 @@ func workspaceAgent() *cobra.Command { if err != nil { return xerrors.Errorf("parse %q: %w", rawURL, err) } - logger := slog.Make(sloghuman.Sink(cmd.OutOrStdout())).Leveled(slog.LevelDebug) + + logPath := filepath.Join(os.TempDir(), "coder-agent.log") + logFile, err := os.OpenFile(logPath, os.O_CREATE|os.O_RDWR, 0600) + if err != nil { + return xerrors.Errorf("open log %q: %w", logPath, err) + } + defer logFile.Close() + + logger := slog.Make(sloghuman.Sink(cmd.ErrOrStderr()), sloghuman.Sink(logFile)).Leveled(slog.LevelDebug) client := codersdk.New(coderURL) // exchangeToken returns a session token.