| 303 | } |
| 304 | |
| 305 | pub fn build_log_plugin<R: Runtime>(log_targets: Vec<Target>) -> TauriPlugin<R> { |
| 306 | tauri_plugin_log::Builder::new() |
| 307 | .level(log::LevelFilter::Trace) |
| 308 | .level_for("ignore", log::LevelFilter::Off) |
| 309 | .level_for("ignore::walk", log::LevelFilter::Off) |
| 310 | .level_for("globset", log::LevelFilter::Off) |
| 311 | .level_for("tracing", log::LevelFilter::Off) |
| 312 | .level_for("opentelemetry_sdk", log::LevelFilter::Off) |
| 313 | .level_for("opentelemetry-otlp", log::LevelFilter::Off) |
| 314 | .level_for("notify", log::LevelFilter::Warn) |
| 315 | .level_for("html5ever", log::LevelFilter::Warn) |
| 316 | .level_for("selectors", log::LevelFilter::Warn) |
| 317 | // These targets can emit hot-path trace diagnostics during event |
| 318 | // routing. Keep debug diagnostics, warnings, and errors, but avoid |
| 319 | // drowning useful app traces in mechanical noise. |
| 320 | .level_for( |
| 321 | "bitfun_core::agentic::events::queue", |
| 322 | log::LevelFilter::Debug, |
| 323 | ) |
| 324 | .level_for( |
| 325 | "bitfun_core::agentic::events::router", |
| 326 | log::LevelFilter::Debug, |
| 327 | ) |
| 328 | .level_for("bitfun_agent_runtime::event_queue", log::LevelFilter::Debug) |
| 329 | .level_for( |
| 330 | "bitfun_agent_runtime::event_router", |
| 331 | log::LevelFilter::Debug, |
| 332 | ) |
| 333 | .level_for("hyper_util", log::LevelFilter::Info) |
| 334 | .level_for("h2", log::LevelFilter::Info) |
| 335 | .level_for("portable_pty", log::LevelFilter::Info) |
| 336 | .level_for("russh", log::LevelFilter::Info) |
| 337 | .level_for("grep_searcher", log::LevelFilter::Warn) |
| 338 | .targets(log_targets) |
| 339 | .rotation_strategy(RotationStrategy::KeepSome(2)) // 1 active + 2 backups |
| 340 | .max_file_size(10 * 1024 * 1024) |
| 341 | .timezone_strategy(TimezoneStrategy::UseLocal) |
| 342 | .clear_format() |
| 343 | .build() |
| 344 | } |
| 345 | |
| 346 | fn format_log_plain( |
| 347 | out: fern::FormatCallback, |