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