use crate::log_buffer;
pub fn init_tracing(verbose_count: u8) {
let default_filter = match verbose_count {
0 => "warn",
1 => "info",
2 => "debug",
_ => "trace",
};
let filter = tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new(default_filter));
let _ = tracing_subscriber::fmt()
.with_env_filter(filter)
.with_writer(std::io::stderr)
.with_target(false)
.try_init();
}
#[must_use]
pub fn init_tracing_with_buffer(verbose_count: u8, capacity: usize) -> log_buffer::LogBuffer {
use tracing_subscriber::Layer as _;
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
let default_filter = match verbose_count {
0 => "warn",
1 => "info",
2 => "debug",
_ => "trace",
};
let stderr_filter = tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new(default_filter));
let buffer_filter = tracing_subscriber::EnvFilter::try_from_env("RUST_LOG_BUFFER")
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info"));
let buffer = log_buffer::LogBuffer::new(capacity);
let fmt_layer = tracing_subscriber::fmt::layer()
.with_writer(std::io::stderr)
.with_target(false)
.with_filter(stderr_filter);
let buf_layer = log_buffer::LogBufferLayer::new(buffer.clone()).with_filter(buffer_filter);
let _ = tracing_subscriber::registry()
.with(fmt_layer)
.with(buf_layer)
.try_init();
buffer
}
#[cfg(feature = "bug-capture")]
#[must_use]
pub fn init_tracing_with_buffer_and_capture(
verbose_count: u8,
capacity: usize,
app_name: &str,
crate_version: impl Into<String>,
) -> (log_buffer::LogBuffer, crate::error_capture::ErrorStore) {
use tracing_subscriber::Layer as _;
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
let default_filter = match verbose_count {
0 => "warn",
1 => "info",
2 => "debug",
_ => "trace",
};
let stderr_filter = tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new(default_filter));
let buffer_filter = tracing_subscriber::EnvFilter::try_from_env("RUST_LOG_BUFFER")
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info"));
let buffer = log_buffer::LogBuffer::new(capacity);
let (capture_layer, store) = crate::error_capture::bug_capture_layer(
app_name,
crate::error_capture::DEFAULT_CAPTURE_CAPACITY,
crate_version,
);
let fmt_layer = tracing_subscriber::fmt::layer()
.with_writer(std::io::stderr)
.with_target(false)
.with_filter(stderr_filter);
let buf_layer = log_buffer::LogBufferLayer::new(buffer.clone()).with_filter(buffer_filter);
let _ = tracing_subscriber::registry()
.with(fmt_layer)
.with(buf_layer)
.with(capture_layer)
.try_init();
(buffer, store)
}
pub fn maybe_disable_color(no_color: bool) {
let env_says_no =
std::env::var("NO_COLOR").is_ok() || std::env::var("TERM").as_deref() == Ok("dumb");
if no_color || env_says_no {
colored::control::set_override(false);
}
}