@@ -5,8 +5,14 @@ use crate::{chan, spawn, Receiver, SendError, Sender, WaitGroup};
5
5
use log:: { LevelFilter , Log , Metadata , Record } ;
6
6
use std:: sync:: { Arc , OnceLock } ;
7
7
use std:: time:: SystemTime ;
8
+
8
9
pub static LOGGER : OnceLock < Logger > = OnceLock :: new ( ) ;
9
10
11
+ /// get Logger,but you must call `fast_log::init`
12
+ pub fn logger ( ) -> & ' static Logger {
13
+ LOGGER . get_or_init ( || { Logger :: default ( ) } )
14
+ }
15
+
10
16
pub struct Logger {
11
17
pub cfg : OnceLock < Config > ,
12
18
pub send : OnceLock < Sender < FastLogRecord > > ,
@@ -43,7 +49,7 @@ impl Logger {
43
49
now : SystemTime :: now ( ) ,
44
50
formated : log,
45
51
} ;
46
- if let Some ( send) = LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) . send . get ( ) {
52
+ if let Some ( send) = LOGGER . get_or_init ( || { Logger :: default ( ) } ) . send . get ( ) {
47
53
send. send ( fast_log_record)
48
54
} else {
49
55
// Ok(())
@@ -61,8 +67,8 @@ impl Log for Logger {
61
67
metadata. level ( ) <= self . get_level ( )
62
68
}
63
69
fn log ( & self , record : & Record ) {
64
- if let Some ( filter) = LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) . cfg . get ( ) {
65
- if let Some ( send) = LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) . send . get ( ) {
70
+ if let Some ( filter) = LOGGER . get_or_init ( || { Logger :: default ( ) } ) . cfg . get ( ) {
71
+ if let Some ( send) = LOGGER . get_or_init ( || { Logger :: default ( ) } ) . send . get ( ) {
66
72
for filter in filter. filters . iter ( ) {
67
73
if !filter. do_log ( record) {
68
74
return ;
@@ -97,21 +103,21 @@ pub fn init(config: Config) -> Result<&'static Logger, LogError> {
97
103
return Err ( LogError :: from ( "[fast_log] appends can not be empty!" ) ) ;
98
104
}
99
105
let ( s, r) = chan ( config. chan_len ) ;
100
- LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) . send . set ( s) . map_err ( |_| LogError :: from ( "set fail" ) ) ?;
101
- LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) . recv . set ( r) . map_err ( |_| LogError :: from ( "set fail" ) ) ?;
102
- LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) . set_level ( config. level ) ;
103
- LOGGER . get_or_init ( ||{ Logger :: default ( ) } )
106
+ LOGGER . get_or_init ( || { Logger :: default ( ) } ) . send . set ( s) . map_err ( |_| LogError :: from ( "set fail" ) ) ?;
107
+ LOGGER . get_or_init ( || { Logger :: default ( ) } ) . recv . set ( r) . map_err ( |_| LogError :: from ( "set fail" ) ) ?;
108
+ LOGGER . get_or_init ( || { Logger :: default ( ) } ) . set_level ( config. level ) ;
109
+ LOGGER . get_or_init ( || { Logger :: default ( ) } )
104
110
. cfg
105
111
. set ( config)
106
112
. map_err ( |_| LogError :: from ( "set fail=" ) ) ?;
107
113
//main recv data
108
- log:: set_logger ( LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) )
109
- . map ( |( ) | log:: set_max_level ( LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) . cfg . get ( ) . unwrap ( ) . level ) )
114
+ log:: set_logger ( LOGGER . get_or_init ( || { Logger :: default ( ) } ) )
115
+ . map ( |( ) | log:: set_max_level ( LOGGER . get_or_init ( || { Logger :: default ( ) } ) . cfg . get ( ) . unwrap ( ) . level ) )
110
116
. map_err ( |e| LogError :: from ( e) ) ?;
111
117
112
118
let mut receiver_vec = vec ! [ ] ;
113
119
let mut sender_vec: Vec < Sender < Arc < Vec < FastLogRecord > > > > = vec ! [ ] ;
114
- let cfg = LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) . cfg . get ( ) . unwrap ( ) ;
120
+ let cfg = LOGGER . get_or_init ( || { Logger :: default ( ) } ) . cfg . get ( ) . unwrap ( ) ;
115
121
for a in cfg. appends . iter ( ) {
116
122
let ( s, r) = chan ( cfg. chan_len ) ;
117
123
sender_vec. push ( s) ;
@@ -166,7 +172,7 @@ pub fn init(config: Config) -> Result<&'static Logger, LogError> {
166
172
let senders = sender_vec. clone ( ) ;
167
173
spawn ( move || {
168
174
loop {
169
- let recv = LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) . recv . get ( ) . unwrap ( ) ;
175
+ let recv = LOGGER . get_or_init ( || { Logger :: default ( ) } ) . recv . get ( ) . unwrap ( ) ;
170
176
let mut remain = Vec :: with_capacity ( recv. len ( ) ) ;
171
177
//recv
172
178
if recv. len ( ) == 0 {
@@ -188,7 +194,7 @@ pub fn init(config: Config) -> Result<&'static Logger, LogError> {
188
194
let mut exit = false ;
189
195
for x in & mut remain {
190
196
if x. formated . is_empty ( ) {
191
- LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) . cfg . get ( ) . unwrap ( ) . format . do_format ( x) ;
197
+ LOGGER . get_or_init ( || { Logger :: default ( ) } ) . cfg . get ( ) . unwrap ( ) . format . do_format ( x) ;
192
198
}
193
199
if x. command . eq ( & Command :: CommandExit ) {
194
200
exit = true ;
@@ -204,7 +210,7 @@ pub fn init(config: Config) -> Result<&'static Logger, LogError> {
204
210
}
205
211
} ) ;
206
212
}
207
- return Ok ( LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) ) ;
213
+ return Ok ( LOGGER . get_or_init ( || { Logger :: default ( ) } ) ) ;
208
214
}
209
215
210
216
pub fn exit ( ) -> Result < ( ) , LogError > {
@@ -219,7 +225,7 @@ pub fn exit() -> Result<(), LogError> {
219
225
now : SystemTime :: now ( ) ,
220
226
formated : String :: new ( ) ,
221
227
} ;
222
- let result = LOGGER . get_or_init ( ||{ Logger :: default ( ) } )
228
+ let result = LOGGER . get_or_init ( || { Logger :: default ( ) } )
223
229
. send
224
230
. get ( )
225
231
. ok_or_else ( || LogError :: from ( "not init" ) ) ?
@@ -246,7 +252,7 @@ pub fn flush() -> Result<WaitGroup, LogError> {
246
252
now : SystemTime :: now ( ) ,
247
253
formated : String :: new ( ) ,
248
254
} ;
249
- let result = LOGGER . get_or_init ( ||{ Logger :: default ( ) } )
255
+ let result = LOGGER . get_or_init ( || { Logger :: default ( ) } )
250
256
. send
251
257
. get ( )
252
258
. ok_or_else ( || LogError :: from ( "not init" ) ) ?
@@ -261,5 +267,5 @@ pub fn flush() -> Result<WaitGroup, LogError> {
261
267
}
262
268
263
269
pub fn print ( log : String ) -> Result < ( ) , SendError < FastLogRecord > > {
264
- LOGGER . get_or_init ( ||{ Logger :: default ( ) } ) . print ( log)
270
+ LOGGER . get_or_init ( || { Logger :: default ( ) } ) . print ( log)
265
271
}
0 commit comments