logging: make -verbose -termui=false log to stdout
Commit d72563ac30bab6471121f561f3bb41991a3c91d1 made it so we never send
logs to stdout/stderr, but I prefer them on stderr when possible. So, if
termui isn't enabled, let's send them to stderr. --termui used to not be
propogated; now it is.
diff --git a/cmd/sketch/main.go b/cmd/sketch/main.go
index 08f8cd8..32f9508 100644
--- a/cmd/sketch/main.go
+++ b/cmd/sketch/main.go
@@ -92,7 +92,7 @@
ctx := skribe.ContextWithAttr(context.Background(), slog.String("session_id", flagArgs.sessionID))
// Configure logging
- slogHandler, logFile, err := setupLogging(flagArgs.oneShot, flagArgs.verbose, flagArgs.unsafe)
+ slogHandler, logFile, err := setupLogging(flagArgs.termUI, flagArgs.verbose, flagArgs.unsafe)
if err != nil {
return err
}
@@ -292,6 +292,7 @@
Verbose: flags.verbose,
DockerArgs: flags.dockerArgs,
ExperimentFlag: flags.experimentFlag.String(),
+ TermUI: flags.termUI,
}
if err := dockerimg.LaunchContainer(ctx, config); err != nil {
@@ -541,23 +542,26 @@
// setupLogging configures the logging system based on command-line flags.
// Returns the slog handler and optionally a log file (which should be closed by the caller).
-func setupLogging(oneShot, verbose, unsafe bool) (slog.Handler, *os.File, error) {
+func setupLogging(termui, verbose, unsafe bool) (slog.Handler, *os.File, error) {
var slogHandler slog.Handler
var logFile *os.File
var err error
- if !oneShot && !verbose {
- // Log to a file
- logFile, err = os.CreateTemp("", "sketch-cli-log-*")
- if err != nil {
- return nil, nil, fmt.Errorf("cannot create log file: %v", err)
- }
- if unsafe {
- fmt.Printf("structured logs: %v\n", logFile.Name())
- }
+ if verbose && !termui {
+ // Log to stderr
+ slogHandler = slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelDebug})
+ return slogHandler, nil, nil
}
- // Always send slogs to the logFile.
+ // Log to a file
+ logFile, err = os.CreateTemp("", "sketch-cli-log-*")
+ if err != nil {
+ return nil, nil, fmt.Errorf("cannot create log file: %v", err)
+ }
+ if unsafe {
+ fmt.Printf("structured logs: %v\n", logFile.Name())
+ }
+
slogHandler = slog.NewJSONHandler(logFile, &slog.HandlerOptions{Level: slog.LevelDebug})
slogHandler = skribe.AttrsWrap(slogHandler)
diff --git a/dockerimg/dockerimg.go b/dockerimg/dockerimg.go
index 41026a4..d824dd0 100644
--- a/dockerimg/dockerimg.go
+++ b/dockerimg/dockerimg.go
@@ -101,6 +101,9 @@
// ExperimentFlag contains the experimental features to enable
ExperimentFlag string
+
+ // TermUI enables terminal UI
+ TermUI bool
}
// LaunchContainer creates a docker container for a project, installs sketch and opens a connection to it.
@@ -490,6 +493,7 @@
"-outside-os="+config.OutsideOS,
"-outside-working-dir="+config.OutsideWorkingDir,
"-open=false",
+ "-termui="+fmt.Sprintf("%t", config.TermUI),
"-x="+config.ExperimentFlag,
)
if config.Model != "" {