Skip to content

Commit a25b2af

Browse files
authored
desktop: use tracing for logging (#13135)
1 parent 8bfd6fd commit a25b2af

File tree

10 files changed

+264
-154
lines changed

10 files changed

+264
-154
lines changed

packages/desktop/src-tauri/Cargo.lock

Lines changed: 96 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/desktop/src-tauri/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ specta = "=2.0.0-rc.22"
4747
specta-typescript = "0.0.9"
4848
tauri-specta = { version = "=2.0.0-rc.21", features = ["derive", "typescript"] }
4949
dirs = "6.0.0"
50+
tracing = "0.1"
51+
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
52+
tracing-appender = "0.2"
53+
chrono = "0.4"
5054

5155
[target.'cfg(target_os = "linux")'.dependencies]
5256
gtk = "0.18.2"

packages/desktop/src-tauri/src/cli.rs

Lines changed: 22 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ use tauri_plugin_shell::{
66
use tauri_plugin_store::StoreExt;
77
use tokio::sync::oneshot;
88

9-
use crate::{
10-
LogState,
11-
constants::{MAX_LOG_ENTRIES, SETTINGS_STORE, WSL_ENABLED_KEY},
12-
};
9+
use crate::constants::{SETTINGS_STORE, WSL_ENABLED_KEY};
1310

1411
const CLI_INSTALL_DIR: &str = ".opencode/bin";
1512
const CLI_BINARY_NAME: &str = "opencode";
@@ -29,7 +26,7 @@ pub async fn get_config(app: &AppHandle) -> Option<Config> {
2926
create_command(app, "debug config", &[])
3027
.output()
3128
.await
32-
.inspect_err(|e| eprintln!("Failed to read OC config: {e}"))
29+
.inspect_err(|e| tracing::warn!("Failed to read OC config: {e}"))
3330
.ok()
3431
.and_then(|out| String::from_utf8(out.stdout.to_vec()).ok())
3532
.and_then(|s| serde_json::from_str::<Config>(&s).ok())
@@ -104,12 +101,12 @@ pub fn install_cli(app: tauri::AppHandle) -> Result<String, String> {
104101

105102
pub fn sync_cli(app: tauri::AppHandle) -> Result<(), String> {
106103
if cfg!(debug_assertions) {
107-
println!("Skipping CLI sync for debug build");
104+
tracing::debug!("Skipping CLI sync for debug build");
108105
return Ok(());
109106
}
110107

111108
if !is_cli_installed() {
112-
println!("No CLI installation found, skipping sync");
109+
tracing::info!("No CLI installation found, skipping sync");
113110
return Ok(());
114111
}
115112

@@ -132,21 +129,21 @@ pub fn sync_cli(app: tauri::AppHandle) -> Result<(), String> {
132129
let app_version = app.package_info().version.clone();
133130

134131
if cli_version >= app_version {
135-
println!(
136-
"CLI version {} is up to date (app version: {}), skipping sync",
137-
cli_version, app_version
132+
tracing::info!(
133+
%cli_version, %app_version,
134+
"CLI is up to date, skipping sync"
138135
);
139136
return Ok(());
140137
}
141138

142-
println!(
143-
"CLI version {} is older than app version {}, syncing",
144-
cli_version, app_version
139+
tracing::info!(
140+
%cli_version, %app_version,
141+
"CLI is older than app version, syncing"
145142
);
146143

147144
install_cli(app)?;
148145

149-
println!("Synced installed CLI");
146+
tracing::info!("Synced installed CLI");
150147

151148
Ok(())
152149
}
@@ -207,7 +204,7 @@ pub fn create_command(app: &tauri::AppHandle, args: &str, extra_env: &[(&str, St
207204

208205
if cfg!(windows) {
209206
if is_wsl_enabled(app) {
210-
println!("WSL is enabled, spawning CLI server in WSL.");
207+
tracing::info!("WSL is enabled, spawning CLI server in WSL");
211208
let version = app.package_info().version.to_string();
212209
let mut script = vec![
213210
"set -e".to_string(),
@@ -280,38 +277,9 @@ pub fn serve(
280277
port: u32,
281278
password: &str,
282279
) -> (CommandChild, oneshot::Receiver<TerminatedPayload>) {
283-
let log_state = app.state::<LogState>();
284-
let log_state_clone = log_state.inner().clone();
285-
286280
let (exit_tx, exit_rx) = oneshot::channel::<TerminatedPayload>();
287281

288-
println!("spawning sidecar on port {port}");
289-
290-
if let Ok(mut logs) = log_state_clone.0.lock() {
291-
let args =
292-
format!("--print-logs --log-level WARN serve --hostname {hostname} --port {port}");
293-
294-
#[cfg(target_os = "windows")]
295-
{
296-
logs.push_back(format!("[SPAWN] sidecar=opencode-cli args=\"{args}\"\n"));
297-
}
298-
299-
#[cfg(not(target_os = "windows"))]
300-
{
301-
let sidecar = get_sidecar_path(app);
302-
let shell = get_user_shell();
303-
let cmd = if shell.ends_with("/nu") {
304-
format!("^\"{}\" {}", sidecar.display(), args)
305-
} else {
306-
format!("\"{}\" {}", sidecar.display(), args)
307-
};
308-
logs.push_back(format!("[SPAWN] shell=\"{shell}\" argv=\"-il -c {cmd}\"\n"));
309-
}
310-
311-
while logs.len() > MAX_LOG_ENTRIES {
312-
logs.pop_front();
313-
}
314-
}
282+
tracing::info!(port, "Spawning sidecar");
315283

316284
let envs = [
317285
("OPENCODE_SERVER_USERNAME", "opencode".to_string()),
@@ -332,50 +300,22 @@ pub fn serve(
332300
match event {
333301
CommandEvent::Stdout(line_bytes) => {
334302
let line = String::from_utf8_lossy(&line_bytes);
335-
print!("{line}");
336-
337-
// Store log in shared state
338-
if let Ok(mut logs) = log_state_clone.0.lock() {
339-
logs.push_back(format!("[STDOUT] {}", line));
340-
// Keep only the last MAX_LOG_ENTRIES
341-
while logs.len() > MAX_LOG_ENTRIES {
342-
logs.pop_front();
343-
}
344-
}
303+
tracing::info!(target: "sidecar", "{line}");
345304
}
346305
CommandEvent::Stderr(line_bytes) => {
347306
let line = String::from_utf8_lossy(&line_bytes);
348-
eprint!("{line}");
349-
350-
// Store log in shared state
351-
if let Ok(mut logs) = log_state_clone.0.lock() {
352-
logs.push_back(format!("[STDERR] {}", line));
353-
// Keep only the last MAX_LOG_ENTRIES
354-
while logs.len() > MAX_LOG_ENTRIES {
355-
logs.pop_front();
356-
}
357-
}
307+
tracing::info!(target: "sidecar", "{line}");
358308
}
359309
CommandEvent::Error(err) => {
360-
eprintln!("{err}");
361-
362-
if let Ok(mut logs) = log_state_clone.0.lock() {
363-
logs.push_back(format!("[ERROR] {err}\n"));
364-
while logs.len() > MAX_LOG_ENTRIES {
365-
logs.pop_front();
366-
}
367-
}
310+
tracing::error!(target: "sidecar", "{err}");
368311
}
369312
CommandEvent::Terminated(payload) => {
370-
if let Ok(mut logs) = log_state_clone.0.lock() {
371-
logs.push_back(format!(
372-
"[EXIT] code={:?} signal={:?}\n",
373-
payload.code, payload.signal
374-
));
375-
while logs.len() > MAX_LOG_ENTRIES {
376-
logs.pop_front();
377-
}
378-
}
313+
tracing::info!(
314+
target: "sidecar",
315+
code = ?payload.code,
316+
signal = ?payload.signal,
317+
"Sidecar terminated"
318+
);
379319

380320
if let Some(tx) = exit_tx.take() {
381321
let _ = tx.send(payload);

packages/desktop/src-tauri/src/constants.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ pub const SETTINGS_STORE: &str = "opencode.settings.dat";
44
pub const DEFAULT_SERVER_URL_KEY: &str = "defaultServerUrl";
55
pub const WSL_ENABLED_KEY: &str = "wslEnabled";
66
pub const UPDATER_ENABLED: bool = option_env!("TAURI_SIGNING_PRIVATE_KEY").is_some();
7-
pub const MAX_LOG_ENTRIES: usize = 200;
87

98
pub fn window_state_flags() -> StateFlags {
109
StateFlags::all() - StateFlags::DECORATIONS - StateFlags::VISIBLE

0 commit comments

Comments
 (0)