cfg_log/lib.rs
1//! Compile time conditional logging.
2//!
3//! The `cfg_log` crate provides a way to conditionally use the [logging macros] from the
4//! `log` crate depending on whether the `log` feature of the main crate is enabled or not.
5//!
6//! [logging macros]: https://docs.rs/log/latest/log/#macros
7//!
8//! Suppose the `Cargo.toml` file of a crate using `cfg_log` contains
9//!
10//! ```toml
11//! [dependencies]
12//! cfg_log = "0.1.0"
13//! log = { version = "0.4.17", optional = true }
14//! ```
15//!
16//! Then the code
17//!
18//! ```rust
19//! use cfg_log::*;
20//!
21//! fn main() {
22//! debug!("the answer is {}", 42);
23//! }
24//! ```
25//!
26//! is equivalent to
27//!
28//! ```rust
29//! #[cfg(feature = "log")]
30//! use log::*;
31//!
32//! fn main() {
33//! #[cfg(feature = "log")]
34//! debug!("the answer is {}", 42);
35//! }
36
37/// Equivalent to [`log::log_enabled!`](https://docs.rs/log/latest/log/macro.log_enabled.html)
38/// if the feature `log` is enabled, `false` otherwise.
39#[macro_export]
40macro_rules! log_enabled {
41 ($($tt:tt)*) => {{
42 #[cfg(feature = "log")]
43 {
44 ::log::log_enabled!($($tt)*)
45 }
46 #[cfg(not(feature = "log"))]
47 {
48 false
49 }
50 }};
51}
52
53/// Equivalent to [`log::log!`](https://docs.rs/log/latest/log/macro.log.html)
54/// if the feature `log` is enabled, discarded otherwise.
55#[macro_export]
56macro_rules! log {
57 ($($tt:tt)*) => {
58 #[cfg(feature="log")]
59 ::log::log!($($tt)*);
60 };
61}
62
63/// Equivalent to [`log::trace!`](https://docs.rs/log/latest/log/macro.trace.html)
64/// if the feature `log` is enabled, discarded otherwise.
65#[macro_export]
66macro_rules! trace {
67 ($($tt:tt)*) => {
68 #[cfg(feature="log")]
69 ::log::trace!($($tt)*);
70 };
71}
72
73/// Equivalent to [`log::debug!`](https://docs.rs/log/latest/log/macro.debug.html)
74/// if the feature `log` is enabled, discarded otherwise.
75#[macro_export]
76macro_rules! debug {
77 ($($tt:tt)*) => {
78 #[cfg(feature="log")]
79 ::log::debug!($($tt)*);
80 };
81}
82
83/// Equivalent to [`log::info!`](https://docs.rs/log/latest/log/macro.info.html)
84/// if the feature `log` is enabled, discarded otherwise.
85#[macro_export]
86macro_rules! info {
87 ($($tt:tt)*) => {
88 #[cfg(feature="log")]
89 ::log::info!($($tt)*);
90 };
91}
92
93/// Equivalent to [`log::warn!`](https://docs.rs/log/latest/log/macro.warn.html)
94/// if the feature `log` is enabled, discarded otherwise.
95#[macro_export]
96macro_rules! warn {
97 ($($tt:tt)*) => {
98 #[cfg(feature="log")]
99 ::log::warn!($($tt)*);
100 };
101}
102
103/// Equivalent to [`log::error!`](https://docs.rs/log/latest/log/macro.error.html)
104/// if the feature `log` is enabled, discarded otherwise.
105#[macro_export]
106macro_rules! error {
107 ($($tt:tt)*) => {
108 #[cfg(feature="log")]
109 ::log::error!($($tt)*);
110 };
111}