Skip to content

Commit d850b35

Browse files
committed
use OnceLock
1 parent f8431e1 commit d850b35

File tree

1 file changed

+18
-20
lines changed

1 file changed

+18
-20
lines changed

src/fast_log.rs

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ use crate::config::Config;
33
use crate::error::LogError;
44
use crate::{chan, spawn, Receiver, SendError, Sender, WaitGroup};
55
use log::{LevelFilter, Log, Metadata, Record};
6-
use std::ops::Deref;
7-
use std::sync::{Arc, LazyLock, OnceLock};
6+
use std::sync::{Arc, OnceLock};
87
use std::time::SystemTime;
9-
10-
pub static LOGGER: LazyLock<Logger> = LazyLock::new(|| Logger::default());
8+
pub static LOGGER: OnceLock<Logger> = OnceLock::new();
119

1210
pub struct Logger {
1311
pub cfg: OnceLock<Config>,
@@ -45,7 +43,7 @@ impl Logger {
4543
now: SystemTime::now(),
4644
formated: log,
4745
};
48-
if let Some(send) = LOGGER.send.get() {
46+
if let Some(send) = LOGGER.get_or_init(||{ Logger::default() }).send.get() {
4947
send.send(fast_log_record)
5048
} else {
5149
// Ok(())
@@ -63,8 +61,8 @@ impl Log for Logger {
6361
metadata.level() <= self.get_level()
6462
}
6563
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() {
6866
for filter in filter.filters.iter() {
6967
if !filter.do_log(record) {
7068
return;
@@ -99,21 +97,21 @@ pub fn init(config: Config) -> Result<&'static Logger, LogError> {
9997
return Err(LogError::from("[fast_log] appends can not be empty!"));
10098
}
10199
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() })
106104
.cfg
107105
.set(config)
108106
.map_err(|_| LogError::from("set fail="))?;
109107
//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))
112110
.map_err(|e| LogError::from(e))?;
113111

114112
let mut receiver_vec = vec![];
115113
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();
117115
for a in cfg.appends.iter() {
118116
let (s, r) = chan(cfg.chan_len);
119117
sender_vec.push(s);
@@ -168,7 +166,7 @@ pub fn init(config: Config) -> Result<&'static Logger, LogError> {
168166
let senders = sender_vec.clone();
169167
spawn(move || {
170168
loop {
171-
let recv = LOGGER.recv.get().unwrap();
169+
let recv = LOGGER.get_or_init(||{ Logger::default() }).recv.get().unwrap();
172170
let mut remain = Vec::with_capacity(recv.len());
173171
//recv
174172
if recv.len() == 0 {
@@ -190,7 +188,7 @@ pub fn init(config: Config) -> Result<&'static Logger, LogError> {
190188
let mut exit = false;
191189
for x in &mut remain {
192190
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);
194192
}
195193
if x.command.eq(&Command::CommandExit) {
196194
exit = true;
@@ -206,7 +204,7 @@ pub fn init(config: Config) -> Result<&'static Logger, LogError> {
206204
}
207205
});
208206
}
209-
return Ok(LOGGER.deref());
207+
return Ok(LOGGER.get_or_init(||{ Logger::default() }));
210208
}
211209

212210
pub fn exit() -> Result<(), LogError> {
@@ -221,7 +219,7 @@ pub fn exit() -> Result<(), LogError> {
221219
now: SystemTime::now(),
222220
formated: String::new(),
223221
};
224-
let result = LOGGER
222+
let result = LOGGER.get_or_init(||{ Logger::default() })
225223
.send
226224
.get()
227225
.ok_or_else(|| LogError::from("not init"))?
@@ -248,7 +246,7 @@ pub fn flush() -> Result<WaitGroup, LogError> {
248246
now: SystemTime::now(),
249247
formated: String::new(),
250248
};
251-
let result = LOGGER
249+
let result = LOGGER.get_or_init(||{ Logger::default() })
252250
.send
253251
.get()
254252
.ok_or_else(|| LogError::from("not init"))?
@@ -263,5 +261,5 @@ pub fn flush() -> Result<WaitGroup, LogError> {
263261
}
264262

265263
pub fn print(log: String) -> Result<(), SendError<FastLogRecord>> {
266-
LOGGER.print(log)
264+
LOGGER.get_or_init(||{ Logger::default() }).print(log)
267265
}

0 commit comments

Comments
 (0)