mirror of
https://gitee.com/openharmony/third_party_rust_log
synced 2024-11-23 07:40:08 +00:00
Merge branch 'master' of https://github.com/rust-lang-nursery/log into lit-code-size
This commit is contained in:
commit
4a082a7e56
@ -22,6 +22,10 @@ features = ["std", "serde", "kv_unstable_sval"]
|
|||||||
name = "filters"
|
name = "filters"
|
||||||
harness = false
|
harness = false
|
||||||
|
|
||||||
|
[[test]]
|
||||||
|
name = "macros"
|
||||||
|
harness = true
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
max_level_off = []
|
max_level_off = []
|
||||||
max_level_error = []
|
max_level_error = []
|
||||||
|
30
src/lib.rs
30
src/lib.rs
@ -1373,10 +1373,39 @@ pub fn logger() -> &'static Log {
|
|||||||
|
|
||||||
// WARNING: this is not part of the crate's public API and is subject to change at any time
|
// WARNING: this is not part of the crate's public API and is subject to change at any time
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
|
#[cfg(not(feature = "kv_unstable"))]
|
||||||
pub fn __private_api_log(
|
pub fn __private_api_log(
|
||||||
args: fmt::Arguments,
|
args: fmt::Arguments,
|
||||||
level: Level,
|
level: Level,
|
||||||
&(target, module_path, file, line): &(&str, &'static str, &'static str, u32),
|
&(target, module_path, file, line): &(&str, &'static str, &'static str, u32),
|
||||||
|
kvs: Option<&[(&str, &str)]>,
|
||||||
|
) {
|
||||||
|
if kvs.is_some() {
|
||||||
|
panic!(
|
||||||
|
"key-value support is experimental and must be enabled using the `kv_unstable` feature"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
logger().log(
|
||||||
|
&Record::builder()
|
||||||
|
.args(args)
|
||||||
|
.level(level)
|
||||||
|
.target(target)
|
||||||
|
.module_path_static(Some(module_path))
|
||||||
|
.file_static(Some(file))
|
||||||
|
.line(Some(line))
|
||||||
|
.build(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// WARNING: this is not part of the crate's public API and is subject to change at any time
|
||||||
|
#[cfg(feature = "kv_unstable")]
|
||||||
|
#[doc(hidden)]
|
||||||
|
pub fn __private_api_log(
|
||||||
|
args: fmt::Arguments<'_>,
|
||||||
|
level: Level,
|
||||||
|
&(target, module_path, file, line): &(&str, &'static str, &'static str, u32),
|
||||||
|
kvs: Option<&[(&str, &kv::ToValue)]>,
|
||||||
) {
|
) {
|
||||||
logger().log(
|
logger().log(
|
||||||
&Record::builder()
|
&Record::builder()
|
||||||
@ -1386,6 +1415,7 @@ pub fn __private_api_log(
|
|||||||
.module_path_static(Some(module_path))
|
.module_path_static(Some(module_path))
|
||||||
.file_static(Some(file))
|
.file_static(Some(file))
|
||||||
.line(Some(line))
|
.line(Some(line))
|
||||||
|
.key_values(&kvs)
|
||||||
.build(),
|
.build(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -29,29 +29,62 @@
|
|||||||
/// ```
|
/// ```
|
||||||
#[macro_export(local_inner_macros)]
|
#[macro_export(local_inner_macros)]
|
||||||
macro_rules! log {
|
macro_rules! log {
|
||||||
(target: $target:expr, $lvl:expr, $message:expr) => ({
|
// log!(target: "...", "...")
|
||||||
|
(target: $target:expr, $lvl:expr, $e:expr) => {
|
||||||
|
$crate::log_impl!(target: $target, $lvl, ($e));
|
||||||
|
};
|
||||||
|
|
||||||
|
// log!(target: "...", "...", args...)
|
||||||
|
(target: $target:expr, $lvl:expr, $e:expr, $($rest:tt)*) => {
|
||||||
|
$crate::log_impl!(target: $target, $lvl, ($e) $($rest)*);
|
||||||
|
};
|
||||||
|
|
||||||
|
// log!("...", args...)
|
||||||
|
($lvl:expr, $($arg:tt)+) => ($crate::log!(target: __log_module_path!(), $lvl, $($arg)+))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export(local_inner_macros)]
|
||||||
|
#[doc(hidden)]
|
||||||
|
macro_rules! log_impl {
|
||||||
|
// End of macro input
|
||||||
|
(target: $target:expr, $lvl:expr, ($($arg:expr),*)) => {
|
||||||
let lvl = $lvl;
|
let lvl = $lvl;
|
||||||
if lvl <= $crate::STATIC_MAX_LEVEL && lvl <= $crate::max_level() {
|
if lvl <= $crate::STATIC_MAX_LEVEL && lvl <= $crate::max_level() {
|
||||||
// ensure that $message is a valid format string literal
|
|
||||||
let _ = __log_format_args!($message);
|
|
||||||
$crate::__private_api_log_lit(
|
$crate::__private_api_log_lit(
|
||||||
$message,
|
__log_format_args!($($arg),*),
|
||||||
lvl,
|
lvl,
|
||||||
&($target, __log_module_path!(), __log_file!(), __log_line!()),
|
&($target, __log_module_path!(), __log_file!(), __log_line!()),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
(target: $target:expr, $lvl:expr, $($arg:tt)+) => ({
|
|
||||||
let lvl = $lvl;
|
// // Trailing k-v pairs containing no trailing comma
|
||||||
|
(target: $target:expr, $lvl:expr, ($($arg:expr),*) { $($key:ident : $value:expr),* }) => {
|
||||||
|
let lvl = log::Level::Info;
|
||||||
if lvl <= $crate::STATIC_MAX_LEVEL && lvl <= $crate::max_level() {
|
if lvl <= $crate::STATIC_MAX_LEVEL && lvl <= $crate::max_level() {
|
||||||
$crate::__private_api_log(
|
$crate::__private_api_log(
|
||||||
__log_format_args!($($arg)+),
|
__log_format_args!($($arg),*),
|
||||||
lvl,
|
lvl,
|
||||||
&($target, __log_module_path!(), __log_file!(), __log_line!()),
|
&(__log_module_path!(), __log_module_path!(), __log_file!(), __log_line!()),
|
||||||
|
Some(&[$((__log_stringify!($key), &$value)),*])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
($lvl:expr, $($arg:tt)+) => (log!(target: __log_module_path!(), $lvl, $($arg)+))
|
|
||||||
|
// Trailing k-v pairs with trailing comma
|
||||||
|
(target: $target:expr, $lvl:expr, ($($e:expr),*) { $($key:ident : $value:expr,)* }) => {
|
||||||
|
$crate::log_impl!(target: $target, $lvl, ($($e),*) { $($key : $value),* });
|
||||||
|
};
|
||||||
|
|
||||||
|
// Last expression arg with no trailing comma
|
||||||
|
(target: $target:expr, $lvl:expr, ($($e:expr),*) $arg:expr) => {
|
||||||
|
$crate::log_impl!(target: $target, $lvl, ($($e,)* $arg));
|
||||||
|
};
|
||||||
|
|
||||||
|
// Expression arg
|
||||||
|
(target: $target:expr, $lvl:expr, ($($e:expr),*) $arg:expr, $($rest:tt)*) => {
|
||||||
|
$crate::log_impl!(target: $target, $lvl, ($($e,)* $arg) $($rest)*);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Logs a message at the error level.
|
/// Logs a message at the error level.
|
||||||
@ -260,3 +293,11 @@ macro_rules! __log_line {
|
|||||||
line!()
|
line!()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! __log_stringify {
|
||||||
|
($($args:tt)*) => {
|
||||||
|
stringify!($($args)*)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
23
tests/macros.rs
Normal file
23
tests/macros.rs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#[macro_use]
|
||||||
|
extern crate log;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn base() {
|
||||||
|
info!("hello");
|
||||||
|
info!("hello",);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn with_args() {
|
||||||
|
info!("hello {}", "cats");
|
||||||
|
info!("hello {}", "cats",);
|
||||||
|
info!("hello {}", "cats",);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn kv() {
|
||||||
|
info!("hello {}", "cats", {
|
||||||
|
cat_1: "chashu",
|
||||||
|
cat_2: "nori",
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user