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}