mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
48 lines
1.2 KiB
Rust
48 lines
1.2 KiB
Rust
use std::{fs::File, io};
|
|
|
|
use anyhow::Context;
|
|
use ratatui_core::style::Color;
|
|
use tracing_appender::non_blocking::WorkerGuard;
|
|
use tracing_subscriber::EnvFilter;
|
|
use yazi_fs::Xdg;
|
|
use yazi_macro::writef;
|
|
use yazi_shared::LOG_LEVEL;
|
|
use yazi_shim::cell::RoCell;
|
|
use yazi_tty::sequence::{SetFg, SetSgr};
|
|
|
|
static _GUARD: RoCell<WorkerGuard> = RoCell::new();
|
|
|
|
pub(super) struct Logs;
|
|
|
|
impl Logs {
|
|
pub(super) fn start() -> anyhow::Result<()> {
|
|
let level = LOG_LEVEL.get();
|
|
if level.is_none() {
|
|
return Ok(());
|
|
}
|
|
|
|
let state_dir = Xdg::state_dir();
|
|
std::fs::create_dir_all(state_dir)
|
|
.with_context(|| format!("failed to create state directory: {state_dir:?}"))?;
|
|
|
|
let log_path = state_dir.join("yazi.log");
|
|
let log_file = File::create(&log_path)
|
|
.with_context(|| format!("failed to create log file: {log_path:?}"))?;
|
|
|
|
let (non_blocking, guard) = tracing_appender::non_blocking(log_file);
|
|
tracing_subscriber::fmt()
|
|
.pretty()
|
|
.with_env_filter(EnvFilter::new(level))
|
|
.with_writer(non_blocking)
|
|
.with_ansi(cfg!(debug_assertions))
|
|
.init();
|
|
|
|
_GUARD.init(guard);
|
|
Ok(writef!(
|
|
io::stderr(),
|
|
"{}Running with log level `{level}`, logs are written to {log_path:?}\n{}",
|
|
SetFg(Color::Yellow),
|
|
SetSgr::Reset,
|
|
)?)
|
|
}
|
|
}
|