fix: default logging to stdout with configurable target (#91)

This commit is contained in:
Nathan Flurry 2026-02-05 23:07:40 -08:00 committed by GitHub
parent 375d73e4cb
commit f09ed7cb9a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
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) | | `-A, --cors-allow-header <HEADER>` | all | CORS allowed header (repeatable) |
| `-C, --cors-allow-credentials` | - | Enable CORS credentials | | `-C, --cors-allow-credentials` | - | Enable CORS credentials |
| `--no-telemetry` | - | Disable anonymous telemetry | | `--no-telemetry` | - | Disable anonymous telemetry |
| `--log-to-file` | - | Redirect server logs to a daily log file |
```bash ```bash
sandbox-agent server --token "$TOKEN" --port 3000 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: HTTP request logging is enabled by default. Control it with:
- `SANDBOX_AGENT_LOG_HTTP=0` to disable request logs - `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 ## Environment
- `SANDBOX_AGENT_LOG_DIR=/path` to set server log dir - `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=0` to disable request logs
- `SANDBOX_AGENT_LOG_HTTP_HEADERS=1` to include request headers (Authorization redacted) - `SANDBOX_AGENT_LOG_HTTP_HEADERS=1` to include request headers (Authorization redacted)
- `RUST_LOG=...` for trace filtering - `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 ```bash
tmux capture-pane -pt opencode:0.0 -S -200 > /tmp/opencode-screen.txt 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 ```bash
tail -n 200 ~/.local/share/sandbox-agent/logs/log-$(date +%m-%d-%y) 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")] #[arg(long = "no-telemetry")]
no_telemetry: bool, no_telemetry: bool,
#[arg(long = "log-to-file")]
log_to_file: bool,
} }
#[derive(Args, Debug)] #[derive(Args, Debug)]
@ -388,8 +391,8 @@ fn main() {
} }
fn init_logging(cli: &Cli) -> Result<(), CliError> { fn init_logging(cli: &Cli) -> Result<(), CliError> {
if matches!(cli.command, Command::Server(_)) { if let Command::Server(server) = &cli.command {
maybe_redirect_server_logs(); maybe_redirect_server_logs(server);
} }
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")); 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")) .unwrap_or_else(|| PathBuf::from(".").join(".sandbox-agent").join("logs"))
} }
fn maybe_redirect_server_logs() { fn maybe_redirect_server_logs(server: &ServerArgs) {
if std::env::var("SANDBOX_AGENT_LOG_STDOUT").is_ok() { 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; return;
} }