#![doc = include_str!("../README.md")]
#![deny(clippy::arithmetic_side_effects)]
pub use context::*;
pub use env_filter::{BuildEnvFilterError, EnvFilterBuilder};
pub use opentelemetry::OpenTelemetryLevel;
pub use reload::{reload, reload_log_config};
#[cfg(feature = "io_trace")]
pub use subscriber::make_io_tracing_layer;
pub use subscriber::{default_subscriber, default_subscriber_with_opentelemetry, Options};
pub use tracing_opentelemetry::OpenTelemetrySpanExt;
pub use {tracing, tracing_appender, tracing_subscriber};
pub mod context;
pub mod env_filter;
mod io_tracer;
pub mod log_config;
mod log_counter;
pub mod macros;
pub mod metrics;
mod opentelemetry;
mod reload;
mod subscriber;
pub mod testonly;
#[macro_export]
#[cfg(feature = "io_trace")]
macro_rules! io_trace {
(count: $name:expr) => { tracing::trace!( target: "io_tracer_count", counter = $name) };
($($fields:tt)*) => { tracing::trace!( target: "io_tracer", $($fields)*) };
}
#[macro_export]
#[cfg(not(feature = "io_trace"))]
macro_rules! io_trace {
(count: $name:expr) => {};
($($fields:tt)*) => {};
}
pub fn print_backtrace() {
let bt = std::backtrace::Backtrace::force_capture();
eprintln!("{bt:?}")
}
#[macro_export]
macro_rules! log_assert {
($cond:expr) => {
$crate::log_assert!($cond, "assertion failed: {}", stringify!($cond))
};
($cond:expr, $fmt:literal $($arg:tt)*) => {
if cfg!(debug_assertions) {
assert!($cond, $fmt $($arg)*);
} else {
if !$cond {
$crate::tracing::error!($fmt $($arg)*);
}
}
};
}
#[macro_export]
macro_rules! log_assert_fail {
($fmt:literal $($arg:tt)*) => {
$crate::log_assert!(false, $fmt $($arg)*);
};
}