xref: /aosp_15_r20/external/pigweed/pw_log/rust/pw_log.rs (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker // Copyright 2023 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker //
3*61c4878aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker // use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker // the License at
6*61c4878aSAndroid Build Coastguard Worker //
7*61c4878aSAndroid Build Coastguard Worker //     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker //
9*61c4878aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker // License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker // the License.
14*61c4878aSAndroid Build Coastguard Worker 
15*61c4878aSAndroid Build Coastguard Worker //! `pw_log` is an extensible logging system that can delegate to
16*61c4878aSAndroid Build Coastguard Worker //! pre-existing logging APIs without upstream changes.
17*61c4878aSAndroid Build Coastguard Worker //!
18*61c4878aSAndroid Build Coastguard Worker //! Clients of `pw_log` simply import and use the logging API, and
19*61c4878aSAndroid Build Coastguard Worker //! log invocations will be handled by the provided logging backend.
20*61c4878aSAndroid Build Coastguard Worker //!
21*61c4878aSAndroid Build Coastguard Worker //! This flexibility is accomplished using Pigweed's
22*61c4878aSAndroid Build Coastguard Worker //! [facade pattern](https://pigweed.dev/docs/facades.html),
23*61c4878aSAndroid Build Coastguard Worker //! which uses build-system redirection to forward log invocations to the
24*61c4878aSAndroid Build Coastguard Worker //! configured backend implementation.
25*61c4878aSAndroid Build Coastguard Worker //!
26*61c4878aSAndroid Build Coastguard Worker //! ```
27*61c4878aSAndroid Build Coastguard Worker //! use pw_log::{log, info, LogLevel};
28*61c4878aSAndroid Build Coastguard Worker //!
29*61c4878aSAndroid Build Coastguard Worker //! log!(LogLevel::Info, "Thank you for signing up for Log Facts!");
30*61c4878aSAndroid Build Coastguard Worker //! info!("Log Fact: Logs can be either {}, {}, or {} sawn.",
31*61c4878aSAndroid Build Coastguard Worker //!   "flat" as &str, "quarter" as &str, "rift" as &str);
32*61c4878aSAndroid Build Coastguard Worker //! ```
33*61c4878aSAndroid Build Coastguard Worker //!
34*61c4878aSAndroid Build Coastguard Worker //! Today `printf` style format strings are well supported with Rust
35*61c4878aSAndroid Build Coastguard Worker //! [`core::fmt`]/`println!()` style strings partially supported
36*61c4878aSAndroid Build Coastguard Worker //! ([b/311232607](https://issues.pigweed.dev/issues/311232607)).
37*61c4878aSAndroid Build Coastguard Worker //!
38*61c4878aSAndroid Build Coastguard Worker //! Currently, when using a `stable` toolchain, "untyped" arguments (i.e.
39*61c4878aSAndroid Build Coastguard Worker //! `{}` style) need to be in the form of an as-cast.  Users with nightly
40*61c4878aSAndroid Build Coastguard Worker //! toolchains can enable the `nightly_tait` feature to remove this restriction.
41*61c4878aSAndroid Build Coastguard Worker //!
42*61c4878aSAndroid Build Coastguard Worker //! TODO: <pwbug.dev/311266298> - Document `pw_log`'s backend API.
43*61c4878aSAndroid Build Coastguard Worker //!
44*61c4878aSAndroid Build Coastguard Worker //! TODO: <pwbug.dev/311232605> - Document how to configure facade backends.
45*61c4878aSAndroid Build Coastguard Worker #![cfg_attr(not(feature = "std"), no_std)]
46*61c4878aSAndroid Build Coastguard Worker #![deny(missing_docs)]
47*61c4878aSAndroid Build Coastguard Worker 
48*61c4878aSAndroid Build Coastguard Worker pub use pw_log_backend_api::LogLevel;
49*61c4878aSAndroid Build Coastguard Worker 
50*61c4878aSAndroid Build Coastguard Worker // Re-export dependences of `pw_log` macros to be accessed via `$crate::__private`.
51*61c4878aSAndroid Build Coastguard Worker #[doc(hidden)]
52*61c4878aSAndroid Build Coastguard Worker pub mod __private {
53*61c4878aSAndroid Build Coastguard Worker     pub use crate::*;
54*61c4878aSAndroid Build Coastguard Worker     // pub use pw_log_backend;
55*61c4878aSAndroid Build Coastguard Worker     pub use pw_log_backend::{pw_log_backend, pw_logf_backend};
56*61c4878aSAndroid Build Coastguard Worker }
57*61c4878aSAndroid Build Coastguard Worker 
58*61c4878aSAndroid Build Coastguard Worker /// Emit a log message using `core::fmt` format string semantics.
59*61c4878aSAndroid Build Coastguard Worker ///
60*61c4878aSAndroid Build Coastguard Worker /// `log` takes a [`LogLevel`], a `core::fmt` style format string, and necessary
61*61c4878aSAndroid Build Coastguard Worker /// arguments to that string and emits a log message to the logging backend.
62*61c4878aSAndroid Build Coastguard Worker ///
63*61c4878aSAndroid Build Coastguard Worker /// ```
64*61c4878aSAndroid Build Coastguard Worker /// use pw_log::{log, LogLevel};
65*61c4878aSAndroid Build Coastguard Worker ///
66*61c4878aSAndroid Build Coastguard Worker /// log!(LogLevel::Info, "Log fact: A {} log has a Janka hardness of {} lbf.",
67*61c4878aSAndroid Build Coastguard Worker ///      "Spruce Pine" as &str, 700 as i32);
68*61c4878aSAndroid Build Coastguard Worker /// ```
69*61c4878aSAndroid Build Coastguard Worker #[macro_export]
70*61c4878aSAndroid Build Coastguard Worker macro_rules! log {
71*61c4878aSAndroid Build Coastguard Worker   ($log_level:expr, $format_string:literal) => {{
72*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
73*61c4878aSAndroid Build Coastguard Worker     $crate::__private::pw_log_backend!($log_level, $format_string)
74*61c4878aSAndroid Build Coastguard Worker   }};
75*61c4878aSAndroid Build Coastguard Worker 
76*61c4878aSAndroid Build Coastguard Worker   ($log_level:expr, $format_string:literal, $($args:expr),*) => {{
77*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
78*61c4878aSAndroid Build Coastguard Worker     $crate::__private::pw_log_backend!($log_level, $format_string, $($args),*)
79*61c4878aSAndroid Build Coastguard Worker   }};
80*61c4878aSAndroid Build Coastguard Worker }
81*61c4878aSAndroid Build Coastguard Worker 
82*61c4878aSAndroid Build Coastguard Worker /// Emit a log message using `printf` format string semantics.
83*61c4878aSAndroid Build Coastguard Worker ///
84*61c4878aSAndroid Build Coastguard Worker /// `logf` takes a [`LogLevel`], a `printf` style format string, and necessary
85*61c4878aSAndroid Build Coastguard Worker /// arguments to that string and emits a log message to the logging backend.
86*61c4878aSAndroid Build Coastguard Worker ///
87*61c4878aSAndroid Build Coastguard Worker /// ```
88*61c4878aSAndroid Build Coastguard Worker /// use pw_log::{logf, LogLevel};
89*61c4878aSAndroid Build Coastguard Worker ///
90*61c4878aSAndroid Build Coastguard Worker /// logf!(LogLevel::Info, "Log fact: A %s log has a Janka hardness of %d lbf.",
91*61c4878aSAndroid Build Coastguard Worker ///     "Spruce Pine", 700);
92*61c4878aSAndroid Build Coastguard Worker /// ```
93*61c4878aSAndroid Build Coastguard Worker #[macro_export]
94*61c4878aSAndroid Build Coastguard Worker macro_rules! logf {
95*61c4878aSAndroid Build Coastguard Worker   ($log_level:expr, $format_string:literal) => {{
96*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
97*61c4878aSAndroid Build Coastguard Worker     $crate::__private::pw_logf_backend!($log_level, $format_string)
98*61c4878aSAndroid Build Coastguard Worker   }};
99*61c4878aSAndroid Build Coastguard Worker 
100*61c4878aSAndroid Build Coastguard Worker   ($log_level:expr, $format_string:literal, $($args:expr),*) => {{
101*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
102*61c4878aSAndroid Build Coastguard Worker     $crate::__private::pw_logf_backend!($log_level, $format_string, $($args),*)
103*61c4878aSAndroid Build Coastguard Worker   }};
104*61c4878aSAndroid Build Coastguard Worker }
105*61c4878aSAndroid Build Coastguard Worker 
106*61c4878aSAndroid Build Coastguard Worker /// Deprecated alias for [`logf!`].
107*61c4878aSAndroid Build Coastguard Worker #[macro_export]
108*61c4878aSAndroid Build Coastguard Worker macro_rules! pw_logf {
109*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
110*61c4878aSAndroid Build Coastguard Worker     logf!($($args),*)
111*61c4878aSAndroid Build Coastguard Worker   }}
112*61c4878aSAndroid Build Coastguard Worker }
113*61c4878aSAndroid Build Coastguard Worker 
114*61c4878aSAndroid Build Coastguard Worker /// Emit a debug level log message using `core:fmt` format string semantics.
115*61c4878aSAndroid Build Coastguard Worker ///
116*61c4878aSAndroid Build Coastguard Worker /// ```
117*61c4878aSAndroid Build Coastguard Worker /// use pw_log::debug;
118*61c4878aSAndroid Build Coastguard Worker ///
119*61c4878aSAndroid Build Coastguard Worker /// debug!("Log Fact: The American toy Lincoln Logs were inspired by the {} in {}.",
120*61c4878aSAndroid Build Coastguard Worker ///     "Imperial Hotel" as &str, "Tokyo" as &str);
121*61c4878aSAndroid Build Coastguard Worker /// ```
122*61c4878aSAndroid Build Coastguard Worker #[macro_export]
123*61c4878aSAndroid Build Coastguard Worker macro_rules! debug {
124*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
125*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
126*61c4878aSAndroid Build Coastguard Worker     __pw_log_crate::log!(__pw_log_crate::LogLevel::Debug, $($args),*)
127*61c4878aSAndroid Build Coastguard Worker   }};
128*61c4878aSAndroid Build Coastguard Worker }
129*61c4878aSAndroid Build Coastguard Worker 
130*61c4878aSAndroid Build Coastguard Worker /// Emit a debug level log message using `printf` format string semantics.
131*61c4878aSAndroid Build Coastguard Worker ///
132*61c4878aSAndroid Build Coastguard Worker /// ```
133*61c4878aSAndroid Build Coastguard Worker /// use pw_log::debugf;
134*61c4878aSAndroid Build Coastguard Worker ///
135*61c4878aSAndroid Build Coastguard Worker /// debugf!("Log Fact: The American toy Lincoln Logs were inspired by the %s in %s.",
136*61c4878aSAndroid Build Coastguard Worker ///     "Imperial Hotel", "Tokyo");
137*61c4878aSAndroid Build Coastguard Worker /// ```
138*61c4878aSAndroid Build Coastguard Worker #[macro_export]
139*61c4878aSAndroid Build Coastguard Worker macro_rules! debugf {
140*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
141*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
142*61c4878aSAndroid Build Coastguard Worker     __pw_log_crate::logf!(__pw_log_crate::LogLevel::Debug, $($args),*)
143*61c4878aSAndroid Build Coastguard Worker   }};
144*61c4878aSAndroid Build Coastguard Worker }
145*61c4878aSAndroid Build Coastguard Worker 
146*61c4878aSAndroid Build Coastguard Worker /// Deprecated alias for [`debugf!`].
147*61c4878aSAndroid Build Coastguard Worker #[macro_export]
148*61c4878aSAndroid Build Coastguard Worker macro_rules! pw_log_debugf {
149*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
150*61c4878aSAndroid Build Coastguard Worker     debugf!($($args),*)
151*61c4878aSAndroid Build Coastguard Worker   }}
152*61c4878aSAndroid Build Coastguard Worker }
153*61c4878aSAndroid Build Coastguard Worker 
154*61c4878aSAndroid Build Coastguard Worker /// Emit an info level log message using `core:fmt` format string semantics.
155*61c4878aSAndroid Build Coastguard Worker ///
156*61c4878aSAndroid Build Coastguard Worker /// ```
157*61c4878aSAndroid Build Coastguard Worker /// use pw_log::info;
158*61c4878aSAndroid Build Coastguard Worker ///
159*61c4878aSAndroid Build Coastguard Worker /// info!(
160*61c4878aSAndroid Build Coastguard Worker ///     "Log Fact: The American president Abraham Lincoln (born {:x}) once lived in a log cabin.",
161*61c4878aSAndroid Build Coastguard Worker ///     0x1809 as u32);
162*61c4878aSAndroid Build Coastguard Worker /// ```
163*61c4878aSAndroid Build Coastguard Worker #[macro_export]
164*61c4878aSAndroid Build Coastguard Worker macro_rules! info {
165*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
166*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
167*61c4878aSAndroid Build Coastguard Worker     __pw_log_crate::log!(__pw_log_crate::LogLevel::Info, $($args),*)
168*61c4878aSAndroid Build Coastguard Worker   }};
169*61c4878aSAndroid Build Coastguard Worker }
170*61c4878aSAndroid Build Coastguard Worker 
171*61c4878aSAndroid Build Coastguard Worker /// Emit an info level log message using `printf` format string semantics.
172*61c4878aSAndroid Build Coastguard Worker ///
173*61c4878aSAndroid Build Coastguard Worker /// ```
174*61c4878aSAndroid Build Coastguard Worker /// use pw_log::infof;
175*61c4878aSAndroid Build Coastguard Worker ///
176*61c4878aSAndroid Build Coastguard Worker /// infof!(
177*61c4878aSAndroid Build Coastguard Worker ///     "Log Fact: The American president Abraham Lincoln (born %x) once lived in a log cabin.",
178*61c4878aSAndroid Build Coastguard Worker /// 0x1809);
179*61c4878aSAndroid Build Coastguard Worker /// ```
180*61c4878aSAndroid Build Coastguard Worker #[macro_export]
181*61c4878aSAndroid Build Coastguard Worker macro_rules! infof {
182*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
183*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
184*61c4878aSAndroid Build Coastguard Worker     __pw_log_crate::logf!(__pw_log_crate::LogLevel::Info, $($args),*)
185*61c4878aSAndroid Build Coastguard Worker   }};
186*61c4878aSAndroid Build Coastguard Worker }
187*61c4878aSAndroid Build Coastguard Worker 
188*61c4878aSAndroid Build Coastguard Worker /// Deprecated alias for [`infof!`].
189*61c4878aSAndroid Build Coastguard Worker #[macro_export]
190*61c4878aSAndroid Build Coastguard Worker macro_rules! pw_log_infof {
191*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
192*61c4878aSAndroid Build Coastguard Worker     infof!($($args),*)
193*61c4878aSAndroid Build Coastguard Worker   }}
194*61c4878aSAndroid Build Coastguard Worker }
195*61c4878aSAndroid Build Coastguard Worker 
196*61c4878aSAndroid Build Coastguard Worker /// Emit a warn level log message using `core::fmt` format string semantics.
197*61c4878aSAndroid Build Coastguard Worker ///
198*61c4878aSAndroid Build Coastguard Worker /// ```
199*61c4878aSAndroid Build Coastguard Worker /// use pw_log::warn;
200*61c4878aSAndroid Build Coastguard Worker ///
201*61c4878aSAndroid Build Coastguard Worker /// warn!(
202*61c4878aSAndroid Build Coastguard Worker ///     "Log Fact: Made from a log, an {} year old dugout canoe is the oldest discovered boat in {}.",
203*61c4878aSAndroid Build Coastguard Worker ///     8000 as i32, "Africa" as &str);
204*61c4878aSAndroid Build Coastguard Worker /// ```
205*61c4878aSAndroid Build Coastguard Worker #[macro_export]
206*61c4878aSAndroid Build Coastguard Worker macro_rules! warn {
207*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
208*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
209*61c4878aSAndroid Build Coastguard Worker     __pw_log_crate::log!(__pw_log_crate::LogLevel::Warn, $($args),*)
210*61c4878aSAndroid Build Coastguard Worker   }};
211*61c4878aSAndroid Build Coastguard Worker }
212*61c4878aSAndroid Build Coastguard Worker 
213*61c4878aSAndroid Build Coastguard Worker /// Emit a warn level log message using `printf` format string semantics.
214*61c4878aSAndroid Build Coastguard Worker ///
215*61c4878aSAndroid Build Coastguard Worker /// ```
216*61c4878aSAndroid Build Coastguard Worker /// use pw_log::warnf;
217*61c4878aSAndroid Build Coastguard Worker ///
218*61c4878aSAndroid Build Coastguard Worker /// warnf!(
219*61c4878aSAndroid Build Coastguard Worker ///     "Log Fact: Made from a log, an %d year old dugout canoe is the oldest discovered boat in %s.",
220*61c4878aSAndroid Build Coastguard Worker ///     8000, "Africa");
221*61c4878aSAndroid Build Coastguard Worker /// ```
222*61c4878aSAndroid Build Coastguard Worker #[macro_export]
223*61c4878aSAndroid Build Coastguard Worker macro_rules! warnf {
224*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
225*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
226*61c4878aSAndroid Build Coastguard Worker     __pw_log_crate::logf!(__pw_log_crate::LogLevel::Warn, $($args),*)
227*61c4878aSAndroid Build Coastguard Worker   }};
228*61c4878aSAndroid Build Coastguard Worker }
229*61c4878aSAndroid Build Coastguard Worker 
230*61c4878aSAndroid Build Coastguard Worker /// Deprecated alias for [`warnf!`].
231*61c4878aSAndroid Build Coastguard Worker #[macro_export]
232*61c4878aSAndroid Build Coastguard Worker macro_rules! pw_log_warnf {
233*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
234*61c4878aSAndroid Build Coastguard Worker     warnf!($($args),*)
235*61c4878aSAndroid Build Coastguard Worker   }}
236*61c4878aSAndroid Build Coastguard Worker }
237*61c4878aSAndroid Build Coastguard Worker 
238*61c4878aSAndroid Build Coastguard Worker /// Emit an error level log message using `core::fmt` format string semantics.
239*61c4878aSAndroid Build Coastguard Worker ///
240*61c4878aSAndroid Build Coastguard Worker /// ```
241*61c4878aSAndroid Build Coastguard Worker /// use pw_log::error;
242*61c4878aSAndroid Build Coastguard Worker ///
243*61c4878aSAndroid Build Coastguard Worker /// error!(
244*61c4878aSAndroid Build Coastguard Worker ///     "Log Fact: Before saws were invented, the {} was used prepare logs for use.",
245*61c4878aSAndroid Build Coastguard Worker ///     "adze" as &str);
246*61c4878aSAndroid Build Coastguard Worker /// ```
247*61c4878aSAndroid Build Coastguard Worker #[macro_export]
248*61c4878aSAndroid Build Coastguard Worker macro_rules! error {
249*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
250*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
251*61c4878aSAndroid Build Coastguard Worker     __pw_log_crate::log!(__pw_log_crate::LogLevel::Error, $($args),*)
252*61c4878aSAndroid Build Coastguard Worker   }};
253*61c4878aSAndroid Build Coastguard Worker }
254*61c4878aSAndroid Build Coastguard Worker 
255*61c4878aSAndroid Build Coastguard Worker /// Emit an error level log message using `printf` format string semantics.
256*61c4878aSAndroid Build Coastguard Worker ///
257*61c4878aSAndroid Build Coastguard Worker /// ```
258*61c4878aSAndroid Build Coastguard Worker /// use pw_log::errorf;
259*61c4878aSAndroid Build Coastguard Worker ///
260*61c4878aSAndroid Build Coastguard Worker /// errorf!(
261*61c4878aSAndroid Build Coastguard Worker ///     "Log Fact: Before saws were invented, the %s was used prepare logs for use.",
262*61c4878aSAndroid Build Coastguard Worker ///     "adze");
263*61c4878aSAndroid Build Coastguard Worker /// ```
264*61c4878aSAndroid Build Coastguard Worker #[macro_export]
265*61c4878aSAndroid Build Coastguard Worker macro_rules! errorf {
266*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
267*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
268*61c4878aSAndroid Build Coastguard Worker     __pw_log_crate::logf!(__pw_log_crate::LogLevel::Error, $($args),*)
269*61c4878aSAndroid Build Coastguard Worker   }};
270*61c4878aSAndroid Build Coastguard Worker }
271*61c4878aSAndroid Build Coastguard Worker 
272*61c4878aSAndroid Build Coastguard Worker /// Deprecated alias for [`errorf!`].
273*61c4878aSAndroid Build Coastguard Worker #[macro_export]
274*61c4878aSAndroid Build Coastguard Worker macro_rules! pw_log_errorf {
275*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
276*61c4878aSAndroid Build Coastguard Worker     errorf!($($args),*)
277*61c4878aSAndroid Build Coastguard Worker   }}
278*61c4878aSAndroid Build Coastguard Worker }
279*61c4878aSAndroid Build Coastguard Worker 
280*61c4878aSAndroid Build Coastguard Worker /// Emit a critical level log message using `core::fmt` format string semantics.
281*61c4878aSAndroid Build Coastguard Worker ///
282*61c4878aSAndroid Build Coastguard Worker /// ```
283*61c4878aSAndroid Build Coastguard Worker /// use pw_log::critical;
284*61c4878aSAndroid Build Coastguard Worker ///
285*61c4878aSAndroid Build Coastguard Worker /// critical!(
286*61c4878aSAndroid Build Coastguard Worker ///     "Log Fact: Until the {}th century, all ships' masts were made from a single log.",
287*61c4878aSAndroid Build Coastguard Worker ///     19 as u32);
288*61c4878aSAndroid Build Coastguard Worker /// ```
289*61c4878aSAndroid Build Coastguard Worker #[macro_export]
290*61c4878aSAndroid Build Coastguard Worker macro_rules! critical {
291*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
292*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
293*61c4878aSAndroid Build Coastguard Worker     __pw_log_crate::log!(__pw_log_crate::LogLevel::Critical, $($args),*)
294*61c4878aSAndroid Build Coastguard Worker   }};
295*61c4878aSAndroid Build Coastguard Worker }
296*61c4878aSAndroid Build Coastguard Worker 
297*61c4878aSAndroid Build Coastguard Worker /// Emit a critical level log message using `printf` format string semantics.
298*61c4878aSAndroid Build Coastguard Worker ///
299*61c4878aSAndroid Build Coastguard Worker /// ```
300*61c4878aSAndroid Build Coastguard Worker /// use pw_log::{criticalf, LogLevel};
301*61c4878aSAndroid Build Coastguard Worker ///
302*61c4878aSAndroid Build Coastguard Worker /// criticalf!(
303*61c4878aSAndroid Build Coastguard Worker ///     "Log Fact: Until the %dth century, all ships' masts were made from a single log.",
304*61c4878aSAndroid Build Coastguard Worker ///     19);
305*61c4878aSAndroid Build Coastguard Worker /// ```
306*61c4878aSAndroid Build Coastguard Worker #[macro_export]
307*61c4878aSAndroid Build Coastguard Worker macro_rules! criticalf {
308*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
309*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
310*61c4878aSAndroid Build Coastguard Worker     __pw_log_crate::logf!(__pw_log_crate::LogLevel::Critical, $($args),*)
311*61c4878aSAndroid Build Coastguard Worker   }};
312*61c4878aSAndroid Build Coastguard Worker }
313*61c4878aSAndroid Build Coastguard Worker 
314*61c4878aSAndroid Build Coastguard Worker /// Deprecated alias for [`criticalf!`].
315*61c4878aSAndroid Build Coastguard Worker #[macro_export]
316*61c4878aSAndroid Build Coastguard Worker macro_rules! pw_log_criticalf {
317*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
318*61c4878aSAndroid Build Coastguard Worker     criticalf!($($args),*)
319*61c4878aSAndroid Build Coastguard Worker   }}
320*61c4878aSAndroid Build Coastguard Worker }
321*61c4878aSAndroid Build Coastguard Worker 
322*61c4878aSAndroid Build Coastguard Worker /// Emit a fatal level log message using `core::fmt` format string semantics.
323*61c4878aSAndroid Build Coastguard Worker ///
324*61c4878aSAndroid Build Coastguard Worker /// *Note*: `fatal` only emits a log message and does not cause a `panic!()`
325*61c4878aSAndroid Build Coastguard Worker ///
326*61c4878aSAndroid Build Coastguard Worker /// ```
327*61c4878aSAndroid Build Coastguard Worker /// use pw_log::fatal;
328*61c4878aSAndroid Build Coastguard Worker ///
329*61c4878aSAndroid Build Coastguard Worker /// fatal!("Log Fact: All out of log facts! Timber!");
330*61c4878aSAndroid Build Coastguard Worker /// ```
331*61c4878aSAndroid Build Coastguard Worker #[macro_export]
332*61c4878aSAndroid Build Coastguard Worker macro_rules! fatal {
333*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
334*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
335*61c4878aSAndroid Build Coastguard Worker     __pw_log_crate::log!(__pw_log_crate::LogLevel::Fatal, $($args),*)
336*61c4878aSAndroid Build Coastguard Worker   }};
337*61c4878aSAndroid Build Coastguard Worker }
338*61c4878aSAndroid Build Coastguard Worker 
339*61c4878aSAndroid Build Coastguard Worker /// Emit a fatal level log message using `printf` format string semantics.
340*61c4878aSAndroid Build Coastguard Worker ///
341*61c4878aSAndroid Build Coastguard Worker /// *Note*: `fatalf` only emits a log message and does not cause a `panic!()`
342*61c4878aSAndroid Build Coastguard Worker ///
343*61c4878aSAndroid Build Coastguard Worker /// ```
344*61c4878aSAndroid Build Coastguard Worker /// use pw_log::{fatalf, LogLevel};
345*61c4878aSAndroid Build Coastguard Worker ///
346*61c4878aSAndroid Build Coastguard Worker /// fatalf!("Log Fact: All out of log facts! Timber!");
347*61c4878aSAndroid Build Coastguard Worker /// ```
348*61c4878aSAndroid Build Coastguard Worker #[macro_export]
349*61c4878aSAndroid Build Coastguard Worker macro_rules! fatalf {
350*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
351*61c4878aSAndroid Build Coastguard Worker     use $crate::__private as __pw_log_crate;
352*61c4878aSAndroid Build Coastguard Worker     __pw_log_crate::logf!(__pw_log_crate::LogLevel::Fatal, $($args),*)
353*61c4878aSAndroid Build Coastguard Worker   }};
354*61c4878aSAndroid Build Coastguard Worker }
355*61c4878aSAndroid Build Coastguard Worker 
356*61c4878aSAndroid Build Coastguard Worker /// Deprecated alias for [`fatalf!`].
357*61c4878aSAndroid Build Coastguard Worker #[macro_export]
358*61c4878aSAndroid Build Coastguard Worker macro_rules! pw_log_fatalf {
359*61c4878aSAndroid Build Coastguard Worker   ($($args:expr),*) => {{
360*61c4878aSAndroid Build Coastguard Worker     fatalf!($($args),*)
361*61c4878aSAndroid Build Coastguard Worker   }}
362*61c4878aSAndroid Build Coastguard Worker }
363*61c4878aSAndroid Build Coastguard Worker 
364*61c4878aSAndroid Build Coastguard Worker #[cfg(test)]
365*61c4878aSAndroid Build Coastguard Worker mod tests {
366*61c4878aSAndroid Build Coastguard Worker     // TODO(b/311262163): Add infrastructure for testing behavior of `pw_log` API.
367*61c4878aSAndroid Build Coastguard Worker     // The syntax of that API is verified through doctests.
368*61c4878aSAndroid Build Coastguard Worker }
369