Skip to content

Commit 7f2248c

Browse files
authored
Improve cleanup on dropping the logger (#15)
* adding flag on send to channel in case the logger guard is dropped * increment version for publish
1 parent 5b278a5 commit 7f2248c

File tree

4 files changed

+27
-7
lines changed

4 files changed

+27
-7
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "inqjet"
3-
version = "0.1.1"
3+
version = "0.1.2"
44
edition = "2021"
55
authors = ["Abso1ut3Zer0"]
66
description = "Ultra-fast, low-latency logging for Rust applications"

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,8 +549,8 @@ where
549549
let parker = Parker::new();
550550
let notifier = parker.unparker().to_owned();
551551
let chan = Arc::new(Channel::new(capacity, parker.unparker().to_owned()));
552-
let logger = Logger::new(chan.clone(), level);
553552
let flag = Arc::new(AtomicBool::new(true));
553+
let logger = Logger::new(chan.clone(), level, flag.clone());
554554
let mut appender = Appender::new(chan, parker, flag.clone(), writer);
555555
log::set_boxed_logger(Box::new(logger))?;
556556
log::set_max_level(level);

src/logger.rs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,15 @@ pub struct Logger {
9090

9191
/// Maximum log level that will be processed. Messages below this level are ignored.
9292
max_level: log::LevelFilter,
93+
94+
/// Flag to indicate if the logger is still running.
95+
running: Arc<AtomicBool>,
96+
}
97+
98+
impl Drop for Logger {
99+
fn drop(&mut self) {
100+
self.running.store(false, Ordering::Relaxed);
101+
}
93102
}
94103

95104
impl Logger {
@@ -122,8 +131,16 @@ impl Logger {
122131
/// // Only log INFO and above (INFO, WARN, ERROR)
123132
/// let logger = Logger::new(channel, LevelFilter::Info);
124133
/// ```
125-
pub(crate) fn new(chan: Arc<Channel>, max_level: log::LevelFilter) -> Self {
126-
Self { chan, max_level }
134+
pub(crate) fn new(
135+
chan: Arc<Channel>,
136+
max_level: log::LevelFilter,
137+
running: Arc<AtomicBool>,
138+
) -> Self {
139+
Self {
140+
chan,
141+
max_level,
142+
running,
143+
}
127144
}
128145
}
129146

@@ -273,7 +290,9 @@ impl log::Log for Logger {
273290
s.write_str("\n").ok();
274291

275292
// Send to consumer thread (transfers ownership)
276-
self.chan.push(s);
293+
if self.running.load(Ordering::Relaxed) {
294+
self.chan.push(s);
295+
}
277296
}
278297

279298
/// Flushes any buffered log records.
@@ -492,7 +511,8 @@ mod tests {
492511
// Create ring buffer and logger
493512
let parker = Parker::new();
494513
let chan = Arc::new(Channel::new(4, parker.unparker().to_owned()));
495-
let logger = Logger::new(chan.clone(), log::LevelFilter::Info);
514+
let running = Arc::new(AtomicBool::new(true));
515+
let logger = Logger::new(chan.clone(), log::LevelFilter::Info, running);
496516
let running = Arc::new(AtomicBool::new(true));
497517

498518
// Create appender with a Vec as writer (for testing)

0 commit comments

Comments
 (0)