58
58
///
59
59
/// let my_logger = MyLogger {};
60
60
/// log!(
61
- /// logger: & my_logger,
61
+ /// logger: my_logger,
62
62
/// Level::Error,
63
63
/// "Received errors: {}, {}",
64
64
/// data.0, data.1
65
65
/// );
66
+ /// ```
67
+ ///
68
+ /// The `logger` argument accepts a value that implements the `Log` trait. The value
69
+ /// will be borrowed within the macro.
70
+ ///
71
+ /// Note that the global level set via Cargo features, or through `set_max_level` will
72
+ /// still apply, even when a custom logger is supplied with the `logger` argument.
66
73
#[ macro_export]
67
74
#[ clippy:: format_args]
68
75
macro_rules! log {
76
+ // log!(logger: my_logger, target: "my_target", Level::Info, "a {} event", "log");
77
+ ( logger: $logger: expr, target: $target: expr, $lvl: expr, $( $arg: tt) +) => ( {
78
+ $crate:: __log!(
79
+ logger: $crate:: __log_logger!( $logger) ,
80
+ target: $target,
81
+ $lvl,
82
+ $( $arg) +
83
+ )
84
+ } ) ;
85
+
86
+ // log!(logger: my_logger, Level::Info, "a log event")
87
+ ( logger: $logger: expr, $lvl: expr, $( $arg: tt) +) => ( {
88
+ $crate:: __log!(
89
+ logger: $crate:: __log_logger!( $logger) ,
90
+ target: $crate:: __private_api:: module_path!( ) ,
91
+ $lvl,
92
+ $( $arg) +
93
+ )
94
+ } ) ;
95
+
96
+ // log!(target: "my_target", Level::Info, "a log event")
97
+ ( target: $target: expr, $lvl: expr, $( $arg: tt) +) => ( {
98
+ $crate:: __log!(
99
+ logger: $crate:: __log_logger!( __log_global_logger) ,
100
+ target: $target,
101
+ $lvl,
102
+ $( $arg) +
103
+ )
104
+ } ) ;
105
+
106
+ // log!(Level::Info, "a log event")
107
+ ( $lvl: expr, $( $arg: tt) +) => ( {
108
+ $crate:: __log!(
109
+ logger: $crate:: __log_logger!( __log_global_logger) ,
110
+ target: $crate:: __private_api:: module_path!( ) ,
111
+ $lvl,
112
+ $( $arg) +
113
+ )
114
+ } ) ;
115
+ }
116
+
117
+ #[ doc( hidden) ]
118
+ #[ macro_export]
119
+ macro_rules! __log {
69
120
// log!(logger: my_logger, target: "my_target", Level::Info, key1:? = 42, key2 = true; "a {} event", "log");
70
121
( logger: $logger: expr, target: $target: expr, $lvl: expr, $( $key: tt $( : $capture: tt) ? $( = $value: expr) ?) ,+; $( $arg: tt) +) => ( {
71
122
let lvl = $lvl;
72
123
if lvl <= $crate:: STATIC_MAX_LEVEL && lvl <= $crate:: max_level( ) {
73
- $crate:: __private_api:: log:: < & _ , _> (
74
- & ( $logger) ,
124
+ $crate:: __private_api:: log(
125
+ $logger,
75
126
$crate:: __private_api:: format_args!( $( $arg) +) ,
76
127
lvl,
77
128
& ( $target, $crate:: __private_api:: module_path!( ) , $crate:: __private_api:: loc( ) ) ,
78
- & [ $( ( $crate:: __log_key!( $key) , $crate:: __log_value!( $key $( : $capture) * = $( $value) * ) ) ) ,+]
129
+ & [ $( ( $crate:: __log_key!( $key) , $crate:: __log_value!( $key $( : $capture) * = $( $value) * ) ) ) ,+] as & [ _ ] ,
79
130
) ;
80
131
}
81
132
} ) ;
@@ -85,29 +136,14 @@ macro_rules! log {
85
136
let lvl = $lvl;
86
137
if lvl <= $crate:: STATIC_MAX_LEVEL && lvl <= $crate:: max_level( ) {
87
138
$crate:: __private_api:: log(
88
- & ( $logger) ,
139
+ $logger,
89
140
$crate:: __private_api:: format_args!( $( $arg) +) ,
90
141
lvl,
91
142
& ( $target, $crate:: __private_api:: module_path!( ) , $crate:: __private_api:: loc( ) ) ,
92
143
( ) ,
93
144
) ;
94
145
}
95
146
} ) ;
96
-
97
- // log!(logger: my_logger, Level::Info, "a log event")
98
- ( logger: $logger: expr, $lvl: expr, $( $arg: tt) +) => ( {
99
- $crate:: log!( logger: $logger, target: $crate:: __private_api:: module_path!( ) , $lvl, $( $arg) +)
100
- } ) ;
101
-
102
- // log!(target: "my_target", Level::Info, "a log event")
103
- ( target: $target: expr, $lvl: expr, $( $arg: tt) +) => ( {
104
- $crate:: log!( logger: $crate:: __private_api:: GlobalLogger , target: $target, $lvl, $( $arg) +)
105
- } ) ;
106
-
107
- // log!(Level::Info, "a log event")
108
- ( $lvl: expr, $( $arg: tt) +) => ( {
109
- $crate:: log!( target: $crate:: __private_api:: module_path!( ) , $lvl, $( $arg) +)
110
- } ) ;
111
147
}
112
148
113
149
/// Logs a message at the error level.
@@ -130,13 +166,13 @@ macro_rules! error {
130
166
// error!(logger: my_logger, target: "my_target", key1 = 42, key2 = true; "a {} event", "log")
131
167
// error!(logger: my_logger, target: "my_target", "a {} event", "log")
132
168
( logger: $logger: expr, target: $target: expr, $( $arg: tt) +) => ( {
133
- $crate:: log!( logger: $logger, target: $target, $crate:: Level :: Error , $( $arg) +)
169
+ $crate:: log!( logger: $crate :: __log_logger! ( $ logger) , target: $target, $crate:: Level :: Error , $( $arg) +)
134
170
} ) ;
135
171
136
172
// error!(logger: my_logger, key1 = 42, key2 = true; "a {} event", "log")
137
173
// error!(logger: my_logger, "a {} event", "log")
138
174
( logger: $logger: expr, $( $arg: tt) +) => ( {
139
- $crate:: log!( logger: $logger, $crate:: Level :: Error , $( $arg) +)
175
+ $crate:: log!( logger: $crate :: __log_logger! ( $ logger) , $crate:: Level :: Error , $( $arg) +)
140
176
} ) ;
141
177
142
178
// error!(target: "my_target", key1 = 42, key2 = true; "a {} event", "log")
@@ -169,13 +205,13 @@ macro_rules! warn {
169
205
// warn!(logger: my_logger, target: "my_target", key1 = 42, key2 = true; "a {} event", "log")
170
206
// warn!(logger: my_logger, target: "my_target", "a {} event", "log")
171
207
( logger: $logger: expr, target: $target: expr, $( $arg: tt) +) => ( {
172
- $crate:: log!( logger: $logger, target: $target, $crate:: Level :: Warn , $( $arg) +)
208
+ $crate:: log!( logger: $crate :: __log_logger! ( $ logger) , target: $target, $crate:: Level :: Warn , $( $arg) +)
173
209
} ) ;
174
210
175
211
// warn!(logger: my_logger, key1 = 42, key2 = true; "a {} event", "log")
176
212
// warn!(logger: my_logger, "a {} event", "log")
177
213
( logger: $logger: expr, $( $arg: tt) +) => ( {
178
- $crate:: log!( logger: $logger, $crate:: Level :: Warn , $( $arg) +)
214
+ $crate:: log!( logger: $crate :: __log_logger! ( $ logger) , $crate:: Level :: Warn , $( $arg) +)
179
215
} ) ;
180
216
181
217
// warn!(target: "my_target", key1 = 42, key2 = true; "a {} event", "log")
@@ -217,13 +253,13 @@ macro_rules! info {
217
253
// info!(logger: my_logger, target: "my_target", key1 = 42, key2 = true; "a {} event", "log")
218
254
// info!(logger: my_logger, target: "my_target", "a {} event", "log")
219
255
( logger: $logger: expr, target: $target: expr, $( $arg: tt) +) => ( {
220
- $crate:: log!( logger: $logger, target: $target, $crate:: Level :: Info , $( $arg) +)
256
+ $crate:: log!( logger: $crate :: __log_logger! ( $ logger) , target: $target, $crate:: Level :: Info , $( $arg) +)
221
257
} ) ;
222
258
223
259
// info!(logger: my_logger, key1 = 42, key2 = true; "a {} event", "log")
224
260
// info!(logger: my_logger, "a {} event", "log")
225
261
( logger: $logger: expr, $( $arg: tt) +) => ( {
226
- $crate:: log!( logger: $logger, $crate:: Level :: Info , $( $arg) +)
262
+ $crate:: log!( logger: $crate :: __log_logger! ( $ logger) , $crate:: Level :: Info , $( $arg) +)
227
263
} ) ;
228
264
229
265
// info!(target: "my_target", key1 = 42, key2 = true; "a {} event", "log")
@@ -257,13 +293,13 @@ macro_rules! debug {
257
293
// debug!(logger: my_logger, target: "my_target", key1 = 42, key2 = true; "a {} event", "log")
258
294
// debug!(logger: my_logger, target: "my_target", "a {} event", "log")
259
295
( logger: $logger: expr, target: $target: expr, $( $arg: tt) +) => ( {
260
- $crate:: log!( logger: $logger, target: $target, $crate:: Level :: Debug , $( $arg) +)
296
+ $crate:: log!( logger: $crate :: __log_logger! ( $ logger) , target: $target, $crate:: Level :: Debug , $( $arg) +)
261
297
} ) ;
262
298
263
299
// debug!(logger: my_logger, key1 = 42, key2 = true; "a {} event", "log")
264
300
// debug!(logger: my_logger, "a {} event", "log")
265
301
( logger: $logger: expr, $( $arg: tt) +) => ( {
266
- $crate:: log!( logger: $logger, $crate:: Level :: Debug , $( $arg) +)
302
+ $crate:: log!( logger: $crate :: __log_logger! ( $ logger) , $crate:: Level :: Debug , $( $arg) +)
267
303
} ) ;
268
304
269
305
// debug!(target: "my_target", key1 = 42, key2 = true; "a {} event", "log")
@@ -301,13 +337,13 @@ macro_rules! trace {
301
337
// trace!(logger: my_logger, target: "my_target", key1 = 42, key2 = true; "a {} event", "log")
302
338
// trace!(logger: my_logger, target: "my_target", "a {} event", "log")
303
339
( logger: $logger: expr, target: $target: expr, $( $arg: tt) +) => ( {
304
- $crate:: log!( logger: $logger, target: $target, $crate:: Level :: Trace , $( $arg) +)
340
+ $crate:: log!( logger: $crate :: __log_logger! ( $ logger) , target: $target, $crate:: Level :: Trace , $( $arg) +)
305
341
} ) ;
306
342
307
343
// trace!(logger: my_logger, key1 = 42, key2 = true; "a {} event", "log")
308
344
// trace!(logger: my_logger, "a {} event", "log")
309
345
( logger: $logger: expr, $( $arg: tt) +) => ( {
310
- $crate:: log!( logger: $logger, $crate:: Level :: Trace , $( $arg) +)
346
+ $crate:: log!( logger: $crate :: __log_logger! ( $ logger) , $crate:: Level :: Trace , $( $arg) +)
311
347
} ) ;
312
348
313
349
// trace!(target: "my_target", key1 = 42, key2 = true; "a {} event", "log")
@@ -349,28 +385,57 @@ macro_rules! trace {
349
385
/// debug!(target: "Global", "expensive debug data: {} {}", data.x, data.y);
350
386
/// }
351
387
/// ```
388
+ ///
389
+ /// This macro accepts the same `target` and `logger` arguments as [`macro@log`].
352
390
#[ macro_export]
353
391
macro_rules! log_enabled {
392
+ // log_enabled!(logger: my_logger, target: "my_target", Level::Info)
354
393
( logger: $logger: expr, target: $target: expr, $lvl: expr) => ( {
355
- let lvl = $lvl;
356
- lvl <= $crate:: STATIC_MAX_LEVEL
357
- && lvl <= $crate:: max_level( )
358
- && $crate:: __private_api:: enabled( $logger, lvl, $target)
394
+ $crate:: __log_enabled!( logger: $crate:: __log_logger!( $logger) , target: $target, $lvl)
359
395
} ) ;
360
396
397
+ // log_enabled!(logger: my_logger, Level::Info)
361
398
( logger: $logger: expr, $lvl: expr) => ( {
362
- $crate:: log_enabled !( logger: $logger, target: $crate:: __private_api:: module_path!( ) , $lvl)
399
+ $crate:: __log_enabled !( logger: $crate :: __log_logger! ( $ logger) , target: $crate:: __private_api:: module_path!( ) , $lvl)
363
400
} ) ;
364
401
402
+ // log_enabled!(target: "my_target", Level::Info)
365
403
( target: $target: expr, $lvl: expr) => ( {
366
- $crate:: log_enabled !( logger: $crate:: __private_api :: GlobalLogger , target: $target, $lvl)
404
+ $crate:: __log_enabled !( logger: $crate:: __log_logger! ( __log_global_logger ) , target: $target, $lvl)
367
405
} ) ;
368
406
407
+ // log_enabled!(Level::Info)
369
408
( $lvl: expr) => ( {
370
- $crate:: log_enabled! ( target: $crate:: __private_api:: module_path!( ) , $lvl)
409
+ $crate:: __log_enabled! ( logger : $crate :: __log_logger! ( __log_global_logger ) , target: $crate:: __private_api:: module_path!( ) , $lvl)
371
410
} ) ;
372
411
}
373
412
413
+ #[ doc( hidden) ]
414
+ #[ macro_export]
415
+ macro_rules! __log_enabled {
416
+ // log_enabled!(logger: my_logger, target: "my_target", Level::Info)
417
+ ( logger: $logger: expr, target: $target: expr, $lvl: expr) => { {
418
+ let lvl = $lvl;
419
+ lvl <= $crate:: STATIC_MAX_LEVEL
420
+ && lvl <= $crate:: max_level( )
421
+ && $crate:: __private_api:: enabled( $logger, lvl, $target)
422
+ } } ;
423
+ }
424
+
425
+ // Determine the logger to use, and whether to take it by-value or by reference
426
+
427
+ #[ doc( hidden) ]
428
+ #[ macro_export]
429
+ macro_rules! __log_logger {
430
+ ( __log_global_logger) => { {
431
+ $crate:: __private_api:: GlobalLogger
432
+ } } ;
433
+
434
+ ( $logger: expr) => { {
435
+ & ( $logger)
436
+ } } ;
437
+ }
438
+
374
439
// These macros use a pattern of #[cfg]s to produce nicer error
375
440
// messages when log features aren't available
376
441
0 commit comments