1
1
//! WARNING: this is not part of the crate's public API and is subject to change at any time
2
2
3
3
use self :: sealed:: KVs ;
4
- use crate :: { Level , Metadata , Record } ;
4
+ use crate :: { logger , Level , Log , Metadata , Record } ;
5
5
use std:: fmt:: Arguments ;
6
6
use std:: panic:: Location ;
7
7
pub use std:: { format_args, module_path, stringify} ;
@@ -34,7 +34,30 @@ impl<'a> KVs<'a> for () {
34
34
35
35
// Log implementation.
36
36
37
- fn log_impl (
37
+ /// The global logger proxy.
38
+ ///
39
+ /// This zero-sized type implements the [`Log`] trait by forwarding calls
40
+ /// to the logger registered with the `set_boxed_logger` or `set_logger`
41
+ /// methods if there is one, or a nop logger as default.
42
+ #[ derive( Copy , Clone , Default , Debug ) ]
43
+ pub struct GlobalLogger ;
44
+
45
+ impl Log for GlobalLogger {
46
+ fn enabled ( & self , metadata : & Metadata ) -> bool {
47
+ logger ( ) . enabled ( metadata)
48
+ }
49
+
50
+ fn log ( & self , record : & Record ) {
51
+ logger ( ) . log ( record)
52
+ }
53
+
54
+ fn flush ( & self ) {
55
+ logger ( ) . flush ( )
56
+ }
57
+ }
58
+
59
+ fn log_impl < L : Log > (
60
+ logger : L ,
38
61
args : Arguments ,
39
62
level : Level ,
40
63
& ( target, module_path, loc) : & ( & str , & ' static str , & ' static Location ) ,
@@ -58,22 +81,30 @@ fn log_impl(
58
81
#[ cfg( feature = "kv" ) ]
59
82
builder. key_values ( & kvs) ;
60
83
61
- crate :: logger ( ) . log ( & builder. build ( ) ) ;
84
+ logger. log ( & builder. build ( ) ) ;
62
85
}
63
86
64
- pub fn log < ' a , K > (
87
+ pub fn log < ' a , K , L > (
88
+ logger : & L ,
65
89
args : Arguments ,
66
90
level : Level ,
67
91
target_module_path_and_loc : & ( & str , & ' static str , & ' static Location ) ,
68
92
kvs : K ,
69
93
) where
70
94
K : KVs < ' a > ,
95
+ L : Log ,
71
96
{
72
- log_impl ( args, level, target_module_path_and_loc, kvs. into_kvs ( ) )
97
+ log_impl (
98
+ logger,
99
+ args,
100
+ level,
101
+ target_module_path_and_loc,
102
+ kvs. into_kvs ( ) ,
103
+ )
73
104
}
74
105
75
- pub fn enabled ( level : Level , target : & str ) -> bool {
76
- crate :: logger ( ) . enabled ( & Metadata :: builder ( ) . level ( level) . target ( target) . build ( ) )
106
+ pub fn enabled < L : Log > ( logger : L , level : Level , target : & str ) -> bool {
107
+ logger. enabled ( & Metadata :: builder ( ) . level ( level) . target ( target) . build ( ) )
77
108
}
78
109
79
110
#[ track_caller]
0 commit comments