#[doc(hidden)]
pub mod __private {
use core::fmt;
use crate::logger::Logger;
use crate::record::{Field, Metadata};
#[inline]
#[must_use]
pub fn global() -> Option<&'static Logger> {
crate::global::get()
}
#[inline]
pub fn emit_args(
logger: &Logger,
metadata: Metadata<'_>,
args: fmt::Arguments<'_>,
fields: &[Field<'_>],
) {
logger.emit_fmt(metadata, args, fields, &[]);
}
#[inline]
pub fn emit_str(logger: &Logger, metadata: Metadata<'_>, message: &str, fields: &[Field<'_>]) {
let _reported = logger.emit_unchecked(metadata, message, fields, &[]);
}
}
#[cfg_attr(all(feature = "logfmt"), doc = "```")]
#[cfg_attr(not(all(feature = "logfmt")), doc = "```ignore")]
#[macro_export]
macro_rules! log_at {
($level:expr, target: $target:expr, $msg:literal $($rest:tt)*) => {
$crate::__log_io_event!(@munch ((global) ($level) ($target) (lit $msg)) [] [] $($rest)*)
};
($level:expr, $msg:literal $($rest:tt)*) => {
$crate::__log_io_event!(
@munch ((global) ($level) (::core::module_path!()) (lit $msg)) [] [] $($rest)*
)
};
($logger:expr, $level:expr, target: $target:expr, $($rest:tt)+) => {
$crate::__log_io_event!(@msg (logger $logger) ($level) ($target) $($rest)+)
};
($logger:expr, $level:expr, $($rest:tt)+) => {
$crate::__log_io_event!(@msg (logger $logger) ($level) (::core::module_path!()) $($rest)+)
};
}
#[cfg_attr(all(feature = "json"), doc = "```")]
#[cfg_attr(not(all(feature = "json")), doc = "```ignore")]
#[macro_export]
macro_rules! trace {
($($args:tt)+) => { $crate::__log_io_level!($crate::Level::Trace; $($args)+) };
}
#[cfg_attr(all(feature = "json"), doc = "```")]
#[cfg_attr(not(all(feature = "json")), doc = "```ignore")]
#[macro_export]
macro_rules! debug {
($($args:tt)+) => { $crate::__log_io_level!($crate::Level::Debug; $($args)+) };
}
#[cfg_attr(all(feature = "json"), doc = "```")]
#[cfg_attr(not(all(feature = "json")), doc = "```ignore")]
#[macro_export]
macro_rules! info {
($($args:tt)+) => { $crate::__log_io_level!($crate::Level::Info; $($args)+) };
}
#[cfg_attr(all(feature = "json"), doc = "```")]
#[cfg_attr(not(all(feature = "json")), doc = "```ignore")]
#[macro_export]
macro_rules! warn {
($($args:tt)+) => { $crate::__log_io_level!($crate::Level::Warn; $($args)+) };
}
#[cfg_attr(all(feature = "json"), doc = "```")]
#[cfg_attr(not(all(feature = "json")), doc = "```ignore")]
#[macro_export]
macro_rules! error {
($($args:tt)+) => { $crate::__log_io_level!($crate::Level::Error; $($args)+) };
}
#[doc(hidden)]
#[macro_export]
macro_rules! __log_io_level {
($level:expr; target: $target:expr, $msg:literal $($rest:tt)*) => {
$crate::__log_io_event!(@munch ((global) ($level) ($target) (lit $msg)) [] [] $($rest)*)
};
($level:expr; $msg:literal $($rest:tt)*) => {
$crate::__log_io_event!(
@munch ((global) ($level) (::core::module_path!()) (lit $msg)) [] [] $($rest)*
)
};
($level:expr; $logger:expr, target: $target:expr, $($rest:tt)+) => {
$crate::__log_io_event!(@msg (logger $logger) ($level) ($target) $($rest)+)
};
($level:expr; $logger:expr, $($rest:tt)+) => {
$crate::__log_io_event!(@msg (logger $logger) ($level) (::core::module_path!()) $($rest)+)
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __log_io_event {
(@msg $lg:tt $level:tt $target:tt $msg:literal $($rest:tt)*) => {
$crate::__log_io_event!(@munch ($lg $level $target (lit $msg)) [] [] $($rest)*)
};
(@msg $lg:tt $level:tt $target:tt $msg:expr $(, $($rest:tt)*)?) => {
$crate::__log_io_event!(@munch ($lg $level $target (expr $msg)) [] [] $(, $($rest)*)?)
};
(@munch $ctx:tt [$($a:tt)*] [$($f:tt)*] $(,)?) => {
$crate::__log_io_event!(@emit $ctx [$($a)*] [$($f)*])
};
(@munch $ctx:tt [$($a:tt)*] [$($f:tt)*] , $k:literal = % $v:expr $(, $($rest:tt)*)?) => {
$crate::__log_io_event!(@munch $ctx [$($a)*]
[$($f)* ($crate::Field::new($k, $crate::Value::Display(&$v)))] $(, $($rest)*)?)
};
(@munch $ctx:tt [$($a:tt)*] [$($f:tt)*] , $k:literal = ? $v:expr $(, $($rest:tt)*)?) => {
$crate::__log_io_event!(@munch $ctx [$($a)*]
[$($f)* ($crate::Field::new($k, $crate::Value::Debug(&$v)))] $(, $($rest)*)?)
};
(@munch $ctx:tt [$($a:tt)*] [$($f:tt)*] , $k:literal = $v:expr $(, $($rest:tt)*)?) => {
$crate::__log_io_event!(@munch $ctx [$($a)*]
[$($f)* ($crate::Field::new($k, $crate::Value::from($v)))] $(, $($rest)*)?)
};
(@munch $ctx:tt [$($a:tt)*] [$($f:tt)*]
, $k0:ident $(. $kn:ident)* = % $v:expr $(, $($rest:tt)*)?) => {
$crate::__log_io_event!(@munch $ctx [$($a)*]
[$($f)* ($crate::Field::new(
::core::concat!(::core::stringify!($k0) $(, ".", ::core::stringify!($kn))*),
$crate::Value::Display(&$v),
))] $(, $($rest)*)?)
};
(@munch $ctx:tt [$($a:tt)*] [$($f:tt)*]
, $k0:ident $(. $kn:ident)* = ? $v:expr $(, $($rest:tt)*)?) => {
$crate::__log_io_event!(@munch $ctx [$($a)*]
[$($f)* ($crate::Field::new(
::core::concat!(::core::stringify!($k0) $(, ".", ::core::stringify!($kn))*),
$crate::Value::Debug(&$v),
))] $(, $($rest)*)?)
};
(@munch $ctx:tt [$($a:tt)*] [$($f:tt)*]
, $k0:ident $(. $kn:ident)* = $v:expr $(, $($rest:tt)*)?) => {
$crate::__log_io_event!(@munch $ctx [$($a)*]
[$($f)* ($crate::Field::new(
::core::concat!(::core::stringify!($k0) $(, ".", ::core::stringify!($kn))*),
$crate::Value::from($v),
))] $(, $($rest)*)?)
};
(@munch $ctx:tt [$($a:tt)*] [$($f:tt)*] , $arg:expr $(, $($rest:tt)*)?) => {
$crate::__log_io_event!(@munch $ctx [$($a)* ($arg)] [$($f)*] $(, $($rest)*)?)
};
(@emit ((global) $level:tt $target:tt $msg:tt) $args:tt $fields:tt) => {
if let ::core::option::Option::Some(__log_io_logger) = $crate::__private::global() {
$crate::__log_io_event!(@body __log_io_logger $level $target $msg $args $fields)
}
};
(@emit ((logger $logger:expr) $level:tt $target:tt $msg:tt) $args:tt $fields:tt) => {{
let __log_io_logger: &$crate::Logger = &$logger;
$crate::__log_io_event!(@body __log_io_logger $level $target $msg $args $fields)
}};
(@body $lg:ident ($level:expr) ($target:expr) (lit $msg:literal) [$($a:tt)*] [$($f:tt)*]) => {{
let __log_io_level: $crate::Level = $level;
let __log_io_target: &str = $target;
if $lg.enabled(__log_io_target, __log_io_level) {
$crate::__private::emit_args(
$lg,
$crate::Metadata::new(__log_io_level, __log_io_target)
.with_location(::core::file!(), ::core::line!()),
::core::format_args!($msg $(, $a)*),
&[$($f),*],
);
}
}};
(@body $lg:ident ($level:expr) ($target:expr) (expr $msg:expr) [] [$($f:tt)*]) => {{
let __log_io_level: $crate::Level = $level;
let __log_io_target: &str = $target;
if $lg.enabled(__log_io_target, __log_io_level) {
$crate::__private::emit_str(
$lg,
$crate::Metadata::new(__log_io_level, __log_io_target)
.with_location(::core::file!(), ::core::line!()),
$msg,
&[$($f),*],
);
}
}};
}