Skip to content

Commit 70aa55e

Browse files
authored
all: use log/slog for debug logs (#2132)
We currently use `debug.Log` for all log messages, which in turn uses the stdlib log package. This change removes the `debug.Log` function and instead initializes a `*slog.Logger` as the default logger. All `debug.Log` calls are now `slog.Debug` or `slog.Error` calls.
1 parent 64d3fd5 commit 70aa55e

File tree

36 files changed

+163
-176
lines changed

36 files changed

+163
-176
lines changed

internal/boxcli/featureflag/feature.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
package featureflag
55

66
import (
7+
"log/slog"
78
"os"
89
"strconv"
910
"testing"
1011

1112
"go.jetpack.io/devbox/internal/build"
12-
"go.jetpack.io/devbox/internal/debug"
1313
"go.jetpack.io/devbox/internal/envir"
1414
)
1515

@@ -54,7 +54,7 @@ func (f *feature) Enabled() bool {
5454
status = "disabled"
5555
}
5656
if !logMap[f.name] {
57-
debug.Log("Feature %q %s via environment variable.", f.name, status)
57+
slog.Debug("Feature %q %s via environment variable.", f.name, status)
5858
logMap[f.name] = true
5959
}
6060
return on

internal/boxcli/midcobra/debug.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package midcobra
55

66
import (
77
"errors"
8+
"log/slog"
89
"os/exec"
910
"strconv"
1011

@@ -64,7 +65,7 @@ func (d *DebugMiddleware) postRun(cmd *cobra.Command, args []string, runErr erro
6465
st := debug.EarliestStackTrace(runErr)
6566
var exitErr *exec.ExitError
6667
if errors.As(runErr, &exitErr) {
67-
debug.Log("Command stderr: %s\n", exitErr.Stderr)
68+
slog.Error("command error", "stderr", exitErr.Stderr, "execid", telemetry.ExecutionID, "stack", st)
6869
}
69-
debug.Log("\nExecutionID:%s\n%+v\n", telemetry.ExecutionID, st)
70+
slog.Error("command error", "execid", telemetry.ExecutionID, "stack", st)
7071
}

internal/boxcli/run.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package boxcli
55

66
import (
77
"fmt"
8+
"log/slog"
89
"slices"
910
"strings"
1011

@@ -13,7 +14,6 @@ import (
1314
"github.com/spf13/pflag"
1415

1516
"go.jetpack.io/devbox/internal/boxcli/usererr"
16-
"go.jetpack.io/devbox/internal/debug"
1717
"go.jetpack.io/devbox/internal/devbox"
1818
"go.jetpack.io/devbox/internal/devbox/devopt"
1919
"go.jetpack.io/devbox/internal/redact"
@@ -65,7 +65,7 @@ func listScripts(cmd *cobra.Command, flags runCmdFlags) []string {
6565
IgnoreWarnings: true,
6666
})
6767
if err != nil {
68-
debug.Log("failed to open devbox: %v", err)
68+
slog.Error("failed to open devbox", "err", err)
6969
return nil
7070
}
7171

@@ -90,8 +90,7 @@ func runScriptCmd(cmd *cobra.Command, args []string, flags runCmdFlags) error {
9090
if err != nil {
9191
return redact.Errorf("error parsing script arguments: %w", err)
9292
}
93-
debug.Log("script: %s", script)
94-
debug.Log("script args: %v", scriptArgs)
93+
slog.Debug("run script", "script", script, "args", scriptArgs)
9594

9695
env, err := flags.Env(path)
9796
if err != nil {

internal/boxcli/secrets.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,6 @@ func secretsDownloadCmd(commonFlags *secretsFlags) *cobra.Command {
180180
if err != nil {
181181
return errors.WithStack(err)
182182
}
183-
if err != nil {
184-
return errors.WithStack(err)
185-
}
186183
absPaths, err := fileutil.EnsureAbsolutePaths(args)
187184
if err != nil {
188185
return errors.WithStack(err)
@@ -211,9 +208,6 @@ func secretsUploadCmd(commonFlags *secretsFlags) *cobra.Command {
211208
if err != nil {
212209
return errors.WithStack(err)
213210
}
214-
if err != nil {
215-
return errors.WithStack(err)
216-
}
217211
absPaths, err := fileutil.EnsureAbsolutePaths(paths)
218212
if err != nil {
219213
return errors.WithStack(err)

internal/cloud/cloud.go

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"fmt"
1010
"io"
1111
"io/fs"
12+
"log/slog"
1213
"os"
1314
"os/exec"
1415
"path/filepath"
@@ -25,7 +26,6 @@ import (
2526
"go.jetpack.io/devbox/internal/cloud/mutagenbox"
2627
"go.jetpack.io/devbox/internal/cloud/openssh"
2728
"go.jetpack.io/devbox/internal/cloud/openssh/sshshim"
28-
"go.jetpack.io/devbox/internal/debug"
2929
"go.jetpack.io/devbox/internal/envir"
3030
"go.jetpack.io/devbox/internal/services"
3131
"go.jetpack.io/devbox/internal/telemetry"
@@ -61,7 +61,7 @@ func ensureVMForUser(vmHostname string, w io.Writer, username string, sshCmd *op
6161
// Inspect the ssh ControlPath to check for existing connections
6262
vmHostname = vmHostnameFromSSHControlPath()
6363
if vmHostname != "" {
64-
debug.Log("Using vmHostname from ssh socket: %v", vmHostname)
64+
slog.Debug("Using vmHostname from ssh socket", "host", vmHostname)
6565
color.New(color.FgGreen).Fprintln(w, "Detected existing virtual machine")
6666
} else {
6767
var region, vmUser string
@@ -80,7 +80,7 @@ func ensureVMForUser(vmHostname string, w io.Writer, username string, sshCmd *op
8080
// match their claimed username from GitHub.
8181
err = openssh.SaveGithubUsernameToLocalFile(username)
8282
if err != nil {
83-
debug.Log("Failed to save username: %v", err)
83+
slog.Error("failed to save username", "err", err)
8484
}
8585
}
8686
}
@@ -142,7 +142,7 @@ func InitVM(
142142
return "", "", nilTime, err
143143
}
144144
}
145-
debug.Log("username: %s", username)
145+
slog.Debug("initializing vm", "user", username)
146146

147147
// Record the start time for telemetry, now that we are done with prompting
148148
// for GitHub username.
@@ -158,7 +158,7 @@ func InitVM(
158158
if err != nil {
159159
return "", "", nilTime, err
160160
}
161-
debug.Log("vm_hostname: %s", vmHostname)
161+
slog.Debug("initializing vm", "host", vmHostname)
162162

163163
return username, vmHostname, telemetryShellStartTime, nil
164164
}
@@ -222,23 +222,23 @@ func AutoPortForward(ctx context.Context, w io.Writer, projectDir, hostID string
222222
func getGithubUsername() (string, error) {
223223
username, err := openssh.GithubUsernameFromLocalFile()
224224
if err == nil && username != "" {
225-
debug.Log("Username from locally-cached file: %s", username)
225+
slog.Debug("got username from locally-cached file", "user", username)
226226
return username, nil
227227
}
228228

229229
if err != nil {
230-
debug.Log("failed to get auth.Username. Error: %v", err)
230+
slog.Debug("failed to get auth.Username", "err", err)
231231
}
232232
username, err = queryGithubUsername()
233233
if err == nil && username != "" {
234-
debug.Log("Username from ssh -T [email protected]: %s", username)
234+
slog.Debug("got username from ssh -T [email protected]", "user", username)
235235
return username, nil
236236
}
237237

238238
// The query for GitHub username is best effort, and if it fails to resolve
239239
// we fallback to prompting the user, and suggesting the local computer username.
240240
if err != nil {
241-
debug.Log("failed to query auth.Username. Error: %v", err)
241+
slog.Debug("failed to query auth.Username", "err", err)
242242
}
243243
return promptUsername()
244244
}
@@ -253,7 +253,7 @@ func promptUsername() (string, error) {
253253
if err != nil {
254254
return "", errors.WithStack(err)
255255
}
256-
debug.Log("Username from prompting user: %s", username)
256+
slog.Debug("got username from prompt", "user", username)
257257
return username, nil
258258
}
259259

@@ -283,7 +283,7 @@ func getVirtualMachine(sshCmd *openssh.Cmd) (vmUser, vmHost, region string, err
283283
return "", "", "", errors.Wrapf(err, "error unmarshalling gateway response %q", sshOut)
284284
}
285285
if redacted, err := json.MarshalIndent(resp.redact(), "\t", " "); err == nil {
286-
debug.Log("got gateway response:\n\t%s", redacted)
286+
slog.Debug("got gateway response", "resp", redacted)
287287
}
288288
if resp.VMPrivateKey != "" {
289289
err = openssh.AddVMKey(resp.VMHost, resp.VMPrivateKey)
@@ -300,7 +300,7 @@ func syncFiles(username, hostname, projectDir string) error {
300300
return err
301301
}
302302
absPathInVM := absoluteProjectPathInVM(username, relProjectPathInVM)
303-
debug.Log("absPathInVM: %s", absPathInVM)
303+
slog.Debug("syncFiles absoluteProjectPathInVM", "path", absPathInVM)
304304

305305
err = copyConfigFileToVM(hostname, username, projectDir, absPathInVM)
306306
if err != nil {
@@ -364,26 +364,26 @@ func updateSyncStatus(mutagenSessionName, username, hostname, relProjectPathInVM
364364
mkdirCmd := openssh.Command(username, hostname)
365365
_, err := mkdirCmd.ExecRemote(fmt.Sprintf(`mkdir -p "%s"`, destDir))
366366
if err != nil {
367-
debug.Log("error setting initial starship mutagen status: %v", err)
367+
slog.Error("error setting initial starship mutagen status", "err", err)
368368
}
369369

370370
// Set an initial status
371371
displayableStatus := "initial sync"
372372
statusCmd := openssh.Command(username, hostname)
373373
_, err = statusCmd.ExecRemote(fmt.Sprintf(`echo "%s" > "%s/mutagen_status.txt"`, displayableStatus, destDir))
374374
if err != nil {
375-
debug.Log("error setting initial starship mutagen status: %v", err)
375+
slog.Error("error setting initial starship mutagen status", "err", err)
376376
}
377377
time.Sleep(5 * time.Second)
378378

379-
debug.Log("Starting check for file sync status")
379+
slog.Debug("Starting check for file sync status")
380380
for status != "watching" {
381381
status, err = getSyncStatus(mutagenSessionName)
382382
if err != nil {
383-
debug.Log("ERROR: getSyncStatus error is %s", err)
383+
slog.Error("getSyncStatus error", "err", err)
384384
return
385385
}
386-
debug.Log("checking file sync status: %s", status)
386+
slog.Debug("checking file sync status", "status", status)
387387

388388
if status == "watching" {
389389
displayableStatus = "\"watching for changes\""
@@ -392,7 +392,7 @@ func updateSyncStatus(mutagenSessionName, username, hostname, relProjectPathInVM
392392
statusCmd := openssh.Command(username, hostname)
393393
_, err = statusCmd.ExecRemote(fmt.Sprintf(`echo "%s" > "%s/mutagen_status.txt"`, displayableStatus, destDir))
394394
if err != nil {
395-
debug.Log("error setting initial starship mutagen status: %v", err)
395+
slog.Error("error setting initial starship mutagen status", "err", err)
396396
}
397397
time.Sleep(5 * time.Second)
398398
}
@@ -422,7 +422,7 @@ func copyConfigFileToVM(hostname, username, projectDir, pathInVM string) error {
422422
// We retry a few times to avoid failing the command.
423423
_, err := mkdirCmd.ExecRemoteWithRetry(fmt.Sprintf(`mkdir -p "%s"`, pathInVM), 5, 4)
424424
if err != nil {
425-
debug.Log("error copying config file to VM: %v", err)
425+
slog.Error("error copying config file to VM", "err", err)
426426
return errors.WithStack(err)
427427
}
428428

@@ -432,7 +432,7 @@ func copyConfigFileToVM(hostname, username, projectDir, pathInVM string) error {
432432
destPath := fmt.Sprintf("%s:%s", destServer, pathInVM)
433433
cmd := exec.Command("scp", configFilePath, destPath)
434434
err = cmd.Run()
435-
debug.Log("scp devbox.json command: %s with error: %s", cmd, err)
435+
slog.Error("scp devbox.json error", "cmd", cmd, "err", err)
436436
return errors.WithStack(err)
437437
}
438438

internal/cloud/mutagen/install.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ package mutagen
55

66
import (
77
"fmt"
8+
"log/slog"
89
"os"
910
"path/filepath"
1011
"runtime"
1112

1213
"github.com/cavaliergopher/grab/v3"
1314

14-
"go.jetpack.io/devbox/internal/debug"
1515
"go.jetpack.io/devbox/internal/fileutil"
1616
)
1717

@@ -31,7 +31,7 @@ func InstallMutagenOnce(binPath string) error {
3131
}
3232

3333
func Install(url, installDir string) error {
34-
debug.Log("installing mutagen from %s to %s", url, installDir)
34+
slog.Debug("installing mutagen from %s to %s", url, installDir)
3535
err := os.MkdirAll(installDir, 0o755)
3636
if err != nil {
3737
return err

internal/cloud/mutagen/wrapper.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ import (
77
"bytes"
88
"encoding/json"
99
"fmt"
10+
"log/slog"
1011
"os"
1112
"os/exec"
1213
"strings"
1314

1415
"github.com/pkg/errors"
1516

16-
"go.jetpack.io/devbox/internal/debug"
1717
"go.jetpack.io/devbox/internal/xdg"
1818
)
1919

@@ -73,7 +73,7 @@ func List(envVars map[string]string, names ...string) ([]Session, error) {
7373
debugPrintExecCmd(cmd)
7474
out, err := cmd.CombinedOutput()
7575
if err != nil {
76-
debug.Log("List error: %s, and out: %s", err, string(out))
76+
slog.Debug("list error", "err", err, "out", string(out))
7777
if e := (&exec.ExitError{}); errors.As(err, &e) {
7878
errMsg := strings.TrimSpace(string(out))
7979
// Special handle the case where no sessions are found:
@@ -151,19 +151,19 @@ func execMutagenOut(args []string, envVars map[string]string) ([]byte, error) {
151151
debugPrintExecCmd(cmd)
152152

153153
if err := cmd.Run(); err != nil {
154-
debug.Log(
155-
"execMutagen error: %s, stdout: %s, stderr: %s",
156-
err,
157-
stdout.String(),
158-
stderr.String(),
154+
slog.Debug(
155+
"execMutagen error",
156+
"err", err,
157+
"stdout", stdout.String(),
158+
"stderr", stderr.String(),
159159
)
160160
if e := (&exec.ExitError{}); errors.As(err, &e) {
161161
return nil, errors.New(strings.TrimSpace(stderr.String()))
162162
}
163163
return nil, err
164164
}
165165

166-
debug.Log("execMutagen worked for cmd: %s", cmd)
166+
slog.Debug("execMutagen worked for cmd", "cmd", cmd)
167167
return stdout.Bytes(), nil
168168
}
169169

@@ -175,7 +175,7 @@ func debugPrintExecCmd(cmd *exec.Cmd) {
175175
envPrint = fmt.Sprintf("%s, %s", envPrint, cmdEnv)
176176
}
177177
}
178-
debug.Log("running mutagen cmd %s with MUTAGEN env: %s", cmd.String(), envPrint)
178+
slog.Debug("running mutagen cmd %s with MUTAGEN env: %s", cmd.String(), envPrint)
179179
}
180180

181181
// envAsKeyValueStrings prepares the env-vars in key=value format to add to the command to be run

0 commit comments

Comments
 (0)