logging-subscriber

Crates.iologging-subscriber
lib.rslogging-subscriber
version
sourcesrc
created_at2024-01-11 12:51:42.990582+00
updated_at2025-03-04 11:10:30.662213+00
descriptionsimple logging subscriber which can be silenced
homepagehttps://github.com/sephiroth74/logging-subscriber
repositoryhttps://github.com/sephiroth74/logging-subscriber
max_upload_size
id1096279
Cargo.toml error:TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Alessandro Crugnola (sephiroth74)

documentation

README

logging-subscriber

crates.io ci

Usage:

use std::sync::{LazyLock, MutexGuard, PoisonError, RwLock};

use console::Style;
use logging_subscriber;
use logging_subscriber::LoggingWriter;
use tracing::level_filters::LevelFilter;
use tracing::subscriber;
use tracing_log::AsLog;
use tracing_subscriber::prelude::*;
use tracing_subscriber::{EnvFilter, Registry};

pub static LOGGING_LEVEL: LazyLock<RwLock<LevelFilter>> = LazyLock::new(|| RwLock::new(LevelFilter::TRACE));

///
/// Initialize logging with the given filter
pub fn init_logging(level_filter: LevelFilter) {
	let registry = Registry::default();
	tui_logger::init_logger(LevelFilter::OFF.as_log()).unwrap();
	tui_logger::set_default_level(LevelFilter::OFF.as_log());

	let timestamp_format = "%H:%M:%S".to_string();

	let term_subscriber = logging_subscriber::LoggingSubscriberBuilder::default()
		.with_time(true)
		.with_timestamp_format(timestamp_format)
		.with_level(true)
		.with_target(false)
		.with_file(false)
		.with_line_number(false)
		.with_min_level(level_filter)
		.with_format_level(logging_subscriber::LevelOutput::Long)
		.with_default_style(Style::default().dim())
		.with_level_style_warn(Style::new().color256(220).bold())
		.with_level_style_trace(Style::new().magenta().bold())
		.with_date_time_style(Style::new().white())
		.build();

	let filter = EnvFilter::builder()
		.with_default_directive(LevelFilter::TRACE.into())
		.from_env()
		.unwrap();

	let subscriber = registry
		.with(filter)
		.with(term_subscriber)
		.with(tui_logger::tracing_subscriber_layer());
	subscriber::set_global_default(subscriber).unwrap();

	*LOGGING_LEVEL.write().unwrap() = level_filter;
}

/// Pause logging of tracing events
pub fn pause_logging() {
	let _ = logging_subscriber::set_enabled(false);
	tui_logger::set_default_level(LevelFilter::TRACE.as_log());
}
/// Returns true if logging is enabled
pub fn is_enabled() -> Result<bool, PoisonError<MutexGuard<'static, LoggingWriter>>> {
	logging_subscriber::is_enabled()
}

// Resume logging of tracing events
pub fn resume_logging() {
	let _ = logging_subscriber::set_enabled(true);
	tui_logger::set_default_level(tracing::level_filters::LevelFilter::OFF.as_log());
}

/// Returns the current logging level
pub fn get_logging_level() -> LevelFilter {
	match LOGGING_LEVEL.read() {
		Ok(l) => *l,
		Err(_) => LevelFilter::OFF,
	}
}

/// Returns true if the current logging level is set to TRACE
pub fn is_logging_verbose() -> bool {
	get_logging_level() == LevelFilter::TRACE
}
Commit count: 8

cargo fmt