annotate src/logging.rs @ 141:a508a69c068a

Remove a lot of Results from functions. Many functions are documented to only return failing Results when given improper inputs or when there is a memory allocation failure (which can be verified by looking at the source). In cases where we know our input is correct, we don't need to check for memory allocation errors for the same reason that Rust doesn't do so when you, e.g., create a new Vec.
author Paul Fisher <paul@pfish.zone>
date Sat, 05 Jul 2025 17:16:56 -0400
parents efbc235f01d3
children ab8020566cd9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
1 //! PAM logging variables and macros.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
2 //!
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
3 //! PAM implementations usually include the ability to log to syslog in a way
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
4 //! that is associated with the log entry itself. This module defines the enums
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
5 //! and macros for logging.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
6 //!
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
7 //! For more details, see [`PamShared::log`](crate::PamShared::log).
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
8 //!
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
9 //! We can't use [the `log` crate](https://docs.rs/log) because that requires
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
10 //! that any `Log` implementors be `Sync` and `Send`, and a PAM handle
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
11 //! may be neither. Furthermore, PAM handles are passed to PAM modules in
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
12 //! dynamic libraries, and `log` doesn't work across dynamic linking boundaries.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
13 //!
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
14 //! A `PamShared` implementation may still use the `log` crate on the backend,
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
15 //! and may even itself implement `log::Log`, but that interface is not exposed
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
16 //! to the generic PAM user.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
17
134
6c1e1bdb4164 Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents: 130
diff changeset
18 #[cfg(pam_impl = "OpenPam")]
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
19 mod levels {
136
efbc235f01d3 Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 134
diff changeset
20 use libpam_sys_helpers::constants;
efbc235f01d3 Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 134
diff changeset
21
efbc235f01d3 Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 134
diff changeset
22 pub const ERROR: i32 = constants::PAM_LOG_ERROR;
efbc235f01d3 Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 134
diff changeset
23 pub const WARN: i32 = constants::PAM_LOG_NOTICE;
efbc235f01d3 Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 134
diff changeset
24 pub const INFO: i32 = constants::PAM_LOG_VERBOSE;
efbc235f01d3 Separate libpam-sys-helpers from libpam-sys.
Paul Fisher <paul@pfish.zone>
parents: 134
diff changeset
25 pub const DEBUG: i32 = constants::PAM_LOG_DEBUG;
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
26 }
134
6c1e1bdb4164 Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents: 130
diff changeset
27 #[cfg(not(pam_impl = "OpenPam"))]
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
28 mod levels {
113
178310336596 Fix up more constants, make things i32 rather than u32.
Paul Fisher <paul@pfish.zone>
parents: 108
diff changeset
29 pub const ERROR: i32 = libc::LOG_ERR;
178310336596 Fix up more constants, make things i32 rather than u32.
Paul Fisher <paul@pfish.zone>
parents: 108
diff changeset
30 pub const WARN: i32 = libc::LOG_WARNING;
178310336596 Fix up more constants, make things i32 rather than u32.
Paul Fisher <paul@pfish.zone>
parents: 108
diff changeset
31 pub const INFO: i32 = libc::LOG_INFO;
178310336596 Fix up more constants, make things i32 rather than u32.
Paul Fisher <paul@pfish.zone>
parents: 108
diff changeset
32 pub const DEBUG: i32 = libc::LOG_DEBUG;
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
33 }
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
34
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
35 /// An entry to be added to the log.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
36 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
37 /// The levels are in descending order of importance and correspond roughly
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
38 /// to the similarly-named levels in the `log` crate.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
39 ///
115
1e11a52b4665 Don't promise ordering for the log level.
Paul Fisher <paul@pfish.zone>
parents: 113
diff changeset
40 /// Their values are ordered monotonically, either increasing or decreasing,
1e11a52b4665 Don't promise ordering for the log level.
Paul Fisher <paul@pfish.zone>
parents: 113
diff changeset
41 /// depending upon the implementation.
116
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
42 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
113
178310336596 Fix up more constants, make things i32 rather than u32.
Paul Fisher <paul@pfish.zone>
parents: 108
diff changeset
43 #[repr(i32)]
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
44 pub enum Level {
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
45 Error = levels::ERROR,
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
46 Warning = levels::WARN,
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
47 Info = levels::INFO,
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
48 Debug = levels::DEBUG,
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
49 }
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
50
118
39760dfc9b3b Detect PAM library based only on system lib; rename minimal lib to XSso.
Paul Fisher <paul@pfish.zone>
parents: 116
diff changeset
51 /// The location of a log entry. Use [`location!`](crate::location!) to create this.
116
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
52 #[derive(Clone, Copy, Debug, Default)]
118
39760dfc9b3b Detect PAM library based only on system lib; rename minimal lib to XSso.
Paul Fisher <paul@pfish.zone>
parents: 116
diff changeset
53 #[non_exhaustive]
116
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
54 pub struct Location<'a> {
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
55 pub file: &'a str,
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
56 pub line: u32,
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
57 pub function: &'a str,
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
58 }
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
59
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
60 impl<'a> Location<'a> {
118
39760dfc9b3b Detect PAM library based only on system lib; rename minimal lib to XSso.
Paul Fisher <paul@pfish.zone>
parents: 116
diff changeset
61 /// Creates a new location. Just use [`location!`](crate::location!) instead.
116
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
62 pub fn new(file: &'a str, line: u32, function: &'a str) -> Self {
118
39760dfc9b3b Detect PAM library based only on system lib; rename minimal lib to XSso.
Paul Fisher <paul@pfish.zone>
parents: 116
diff changeset
63 Self {
39760dfc9b3b Detect PAM library based only on system lib; rename minimal lib to XSso.
Paul Fisher <paul@pfish.zone>
parents: 116
diff changeset
64 file,
39760dfc9b3b Detect PAM library based only on system lib; rename minimal lib to XSso.
Paul Fisher <paul@pfish.zone>
parents: 116
diff changeset
65 line,
39760dfc9b3b Detect PAM library based only on system lib; rename minimal lib to XSso.
Paul Fisher <paul@pfish.zone>
parents: 116
diff changeset
66 function,
39760dfc9b3b Detect PAM library based only on system lib; rename minimal lib to XSso.
Paul Fisher <paul@pfish.zone>
parents: 116
diff changeset
67 }
116
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
68 }
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
69 }
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
70
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
71 /// The [`Location`] where this macro is inserted.
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
72 #[doc(hidden)]
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
73 #[macro_export]
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
74 macro_rules! location {
118
39760dfc9b3b Detect PAM library based only on system lib; rename minimal lib to XSso.
Paul Fisher <paul@pfish.zone>
parents: 116
diff changeset
75 () => {
39760dfc9b3b Detect PAM library based only on system lib; rename minimal lib to XSso.
Paul Fisher <paul@pfish.zone>
parents: 116
diff changeset
76 $crate::logging::Location::new(file!(), line!(), $crate::__function!())
39760dfc9b3b Detect PAM library based only on system lib; rename minimal lib to XSso.
Paul Fisher <paul@pfish.zone>
parents: 116
diff changeset
77 };
116
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
78 }
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
79
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
80 /// Here's the guts of the logger thingy. You shouldn't be using this!
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
81 #[doc(hidden)]
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
82 #[macro_export]
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
83 macro_rules! __log_internal {
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
84 ($handle:expr, $level:ident, $($arg:tt)+) => {
116
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
85 $handle.log($crate::logging::Level::$level, $crate::location!(), &format!($($arg)+));
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
86 }
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
87 }
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
88
116
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
89 /// Ugly, hacky macro to get the current function name.
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
90 ///
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
91 /// [Stolen from Stack Overflow.][https://stackoverflow.com/a/40234666/39808]
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
92 #[doc(hidden)]
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
93 #[macro_export]
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
94 macro_rules! __function {
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
95 () => {{
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
96 fn p() {}
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
97 fn f<T>(_: T) -> &'static str {
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
98 ::std::any::type_name::<T>()
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
99 }
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
100 f(p).trim_end_matches("::p")
118
39760dfc9b3b Detect PAM library based only on system lib; rename minimal lib to XSso.
Paul Fisher <paul@pfish.zone>
parents: 116
diff changeset
101 }};
116
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
102 }
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
103
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
104 /// Logs a message at error level via the given PAM handle.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
105 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
106 /// This supports `format!`-style formatting.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
107 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
108 /// # Example
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
109 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
110 /// ```no_run
98
b87100c5eed4 Start on environment variables, and make pointers nicer.
Paul Fisher <paul@pfish.zone>
parents: 92
diff changeset
111 /// # fn _test(pam_handle: impl nonstick::PamShared) {
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
112 /// # let load_error = "xxx";
103
dfcd96a74ac4 write a truly prodigious amount of documentation
Paul Fisher <paul@pfish.zone>
parents: 98
diff changeset
113 /// nonstick::error!(
dfcd96a74ac4 write a truly prodigious amount of documentation
Paul Fisher <paul@pfish.zone>
parents: 98
diff changeset
114 /// pam_handle,
dfcd96a74ac4 write a truly prodigious amount of documentation
Paul Fisher <paul@pfish.zone>
parents: 98
diff changeset
115 /// "error loading data from data source: {load_error}"
dfcd96a74ac4 write a truly prodigious amount of documentation
Paul Fisher <paul@pfish.zone>
parents: 98
diff changeset
116 /// );
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
117 /// // Will log a message like "error loading data from data source: timed out"
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
118 /// // at ERROR level on syslog.
98
b87100c5eed4 Start on environment variables, and make pointers nicer.
Paul Fisher <paul@pfish.zone>
parents: 92
diff changeset
119 /// # }
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
120 /// ```
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
121 #[macro_export]
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
122 macro_rules! error { ($handle:expr, $($arg:tt)+) => { $crate::__log_internal!($handle, Error, $($arg)+);}}
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
123
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
124 /// Logs a message at warning level via the given PAM handle.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
125 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
126 /// This supports `format!`-style formatting.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
127 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
128 /// # Example
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
129 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
130 /// ```no_run
98
b87100c5eed4 Start on environment variables, and make pointers nicer.
Paul Fisher <paul@pfish.zone>
parents: 92
diff changeset
131 /// # fn _test(pam_handle: impl nonstick::PamShared) {
103
dfcd96a74ac4 write a truly prodigious amount of documentation
Paul Fisher <paul@pfish.zone>
parents: 98
diff changeset
132 /// # let (start, finish) = (0, 0);
dfcd96a74ac4 write a truly prodigious amount of documentation
Paul Fisher <paul@pfish.zone>
parents: 98
diff changeset
133 /// nonstick::warn!(
dfcd96a74ac4 write a truly prodigious amount of documentation
Paul Fisher <paul@pfish.zone>
parents: 98
diff changeset
134 /// pam_handle,
dfcd96a74ac4 write a truly prodigious amount of documentation
Paul Fisher <paul@pfish.zone>
parents: 98
diff changeset
135 /// "loading took too long: {latency_ms} ms",
dfcd96a74ac4 write a truly prodigious amount of documentation
Paul Fisher <paul@pfish.zone>
parents: 98
diff changeset
136 /// latency_ms = start - finish
dfcd96a74ac4 write a truly prodigious amount of documentation
Paul Fisher <paul@pfish.zone>
parents: 98
diff changeset
137 /// );
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
138 /// // Will log a message like "loading took too long: 495 ms"
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
139 /// // at WARN level on syslog.
98
b87100c5eed4 Start on environment variables, and make pointers nicer.
Paul Fisher <paul@pfish.zone>
parents: 92
diff changeset
140 /// # }
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
141 /// ```
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
142 #[macro_export]
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
143 macro_rules! warn { ($handle:expr, $($arg:tt)+) => { $crate::__log_internal!($handle, Warning, $($arg)+);}}
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
144
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
145 /// Logs a message at info level via the given PAM handle.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
146 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
147 /// This supports `format!`-style formatting.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
148 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
149 /// # Example
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
150 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
151 /// ```no_run
98
b87100c5eed4 Start on environment variables, and make pointers nicer.
Paul Fisher <paul@pfish.zone>
parents: 92
diff changeset
152 /// # fn _test(pam_handle: impl nonstick::PamShared) {
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
153 /// nonstick::info!(pam_handle, "using remote backend to load user data");
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
154 /// // Will log a message like "using remote backend to load user data"
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
155 /// // at INFO level on syslog.
98
b87100c5eed4 Start on environment variables, and make pointers nicer.
Paul Fisher <paul@pfish.zone>
parents: 92
diff changeset
156 /// # }
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
157 /// ```
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
158 #[macro_export]
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
159 macro_rules! info { ($handle:expr, $($arg:tt)+) => { $crate::__log_internal!($handle, Info, $($arg)+);}}
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
160
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
161 /// Logs a message at debug level via the given PAM handle.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
162 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
163 /// This level specially includes file/line/column information.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
164 /// This supports `format!`-style formatting.
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
165 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
166 /// # Example
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
167 ///
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
168 /// ```no_run
98
b87100c5eed4 Start on environment variables, and make pointers nicer.
Paul Fisher <paul@pfish.zone>
parents: 92
diff changeset
169 /// # fn _test(pam_handle: impl nonstick::PamShared) {
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
170 /// # let userinfo_url = "https://zombo.com/";
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
171 /// nonstick::debug!(pam_handle, "making HTTP GET request to {userinfo_url}");
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
172 /// // Will log a message like
134
6c1e1bdb4164 Use standard #[cfg] directives rather than custom proc macros.
Paul Fisher <paul@pfish.zone>
parents: 130
diff changeset
173 /// // "making HTTP GET request to https://zombo.com/"
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
174 /// // at DEBUG level on syslog.
98
b87100c5eed4 Start on environment variables, and make pointers nicer.
Paul Fisher <paul@pfish.zone>
parents: 92
diff changeset
175 /// # }
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
176 /// ```
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
177 #[macro_export]
116
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
178 macro_rules! debug { ($handle:expr, $($arg:tt)+) => { $crate::__log_internal!($handle, Debug, $($arg)+);}}
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
179
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
180 #[cfg(test)]
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
181 mod tests {
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
182 use super::*;
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
183 use std::cell::RefCell;
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
184
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
185 #[test]
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
186 fn test_logging() {
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
187 struct Logger(RefCell<Vec<(Level, String)>>);
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
188
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
189 impl Logger {
123
98a624cacd82 Get rid of all the warnings, and arrange attributes.
Paul Fisher <paul@pfish.zone>
parents: 118
diff changeset
190 fn log(&self, level: Level, _: Location<'_>, text: &str) {
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
191 self.0.borrow_mut().push((level, text.to_owned()))
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
192 }
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
193 }
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
194
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
195 let logger = Logger(Default::default());
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
196
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
197 let something = Level::Error;
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
198 error!(logger, "here is another thing: {}", 99);
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
199 warn!(logger, "watch out!");
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
200 info!(logger, "here is some info: {info}", info = "information");
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
201 debug!(logger, "here is something: {something:?}");
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
202
116
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
203 let logged = logger.0.into_inner();
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
204
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
205 assert_eq!(
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
206 vec![
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
207 (Level::Error, "here is another thing: 99".to_owned()),
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
208 (Level::Warning, "watch out!".to_owned()),
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
209 (Level::Info, "here is some info: information".to_owned()),
116
a12706e42c9d Logging, macros, and building:
Paul Fisher <paul@pfish.zone>
parents: 115
diff changeset
210 (Level::Debug, "here is something: Error".to_owned()),
92
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
211 ],
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
212 logged
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
213 );
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
214 }
5ddbcada30f2 Add the ability to log against a PAM handle.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
215 }