fix: default logging to stdout with configurable target

This commit is contained in:
Nathan Flurry 2026-02-05 17:55:34 -08:00
parent 375d73e4cb
commit 9cd839f890
3 changed files with 24 additions and 7 deletions

View file

@ -24,12 +24,13 @@ sandbox-agent server [OPTIONS]
| `-A, --cors-allow-header <HEADER>` | all | CORS allowed header (repeatable) |
| `-C, --cors-allow-credentials` | - | Enable CORS credentials |
| `--no-telemetry` | - | Disable anonymous telemetry |
| `--log-to-file` | - | Redirect server logs to a daily log file |
```bash
sandbox-agent server --token "$TOKEN" --port 3000
```
Server logs are redirected to a daily log file under the sandbox-agent data directory (for example, `~/.local/share/sandbox-agent/logs`). Override with `SANDBOX_AGENT_LOG_DIR`, or set `SANDBOX_AGENT_LOG_STDOUT=1` to keep logs on stdout/stderr.
Server logs print to stdout/stderr by default. Use `--log-to-file` or `SANDBOX_AGENT_LOG_TO_FILE=1` to redirect logs to a daily log file under the sandbox-agent data directory (for example, `~/.local/share/sandbox-agent/logs`). Override the directory with `SANDBOX_AGENT_LOG_DIR`, or set `SANDBOX_AGENT_LOG_STDOUT=1` to force stdout/stderr.
HTTP request logging is enabled by default. Control it with:
- `SANDBOX_AGENT_LOG_HTTP=0` to disable request logs

View file

@ -9,7 +9,8 @@ This plan captures OpenCode TUI output and sends input via tmux so we can valida
## Environment
- `SANDBOX_AGENT_LOG_DIR=/path` to set server log dir
- `SANDBOX_AGENT_LOG_STDOUT=1` to keep logs on stdout/stderr
- `SANDBOX_AGENT_LOG_TO_FILE=1` to redirect logs to files
- `SANDBOX_AGENT_LOG_STDOUT=1` to force logs on stdout/stderr
- `SANDBOX_AGENT_LOG_HTTP=0` to disable request logs
- `SANDBOX_AGENT_LOG_HTTP_HEADERS=1` to include request headers (Authorization redacted)
- `RUST_LOG=...` for trace filtering
@ -42,7 +43,7 @@ This plan captures OpenCode TUI output and sends input via tmux so we can valida
```bash
tmux capture-pane -pt opencode:0.0 -S -200 > /tmp/opencode-screen.txt
```
6. Inspect server logs for requests:
6. Inspect server logs for requests (when log-to-file is enabled):
```bash
tail -n 200 ~/.local/share/sandbox-agent/logs/log-$(date +%m-%d-%y)
```

View file

@ -92,6 +92,9 @@ struct ServerArgs {
#[arg(long = "no-telemetry")]
no_telemetry: bool,
#[arg(long = "log-to-file")]
log_to_file: bool,
}
#[derive(Args, Debug)]
@ -388,8 +391,8 @@ fn main() {
}
fn init_logging(cli: &Cli) -> Result<(), CliError> {
if matches!(cli.command, Command::Server(_)) {
maybe_redirect_server_logs();
if let Command::Server(server) = &cli.command {
maybe_redirect_server_logs(server);
}
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
@ -472,8 +475,20 @@ fn default_server_log_dir() -> PathBuf {
.unwrap_or_else(|| PathBuf::from(".").join(".sandbox-agent").join("logs"))
}
fn maybe_redirect_server_logs() {
if std::env::var("SANDBOX_AGENT_LOG_STDOUT").is_ok() {
fn maybe_redirect_server_logs(server: &ServerArgs) {
let force_stdout = match std::env::var("SANDBOX_AGENT_LOG_STDOUT") {
Ok(value) if value == "0" || value.eq_ignore_ascii_case("false") => false,
Ok(_) => true,
Err(_) => false,
};
let log_to_file_env = match std::env::var("SANDBOX_AGENT_LOG_TO_FILE") {
Ok(value) if value == "0" || value.eq_ignore_ascii_case("false") => false,
Ok(_) => true,
Err(_) => false,
};
let log_to_file = server.log_to_file || log_to_file_env;
if force_stdout || !log_to_file {
return;
}