Skip to content

Instantly share code, notes, and snippets.

@Ujang360
Created October 19, 2019 09:29
Show Gist options
  • Save Ujang360/2e703e6d3bdb39685902bccc8f2b6559 to your computer and use it in GitHub Desktop.
Save Ujang360/2e703e6d3bdb39685902bccc8f2b6559 to your computer and use it in GitHub Desktop.
Multithreaded Logger Demo (Rust)
use log::info;
use std::env;
use std::sync::mpsc;
use std::sync::mpsc::Sender;
use std::thread;
fn init_log() {
env::set_var("RUST_LOG", "info");
env_logger::builder()
.default_format()
.format_timestamp_nanos()
.format_indent(Some(4))
.init();
}
fn log_info(sender: &Sender<String>, message: String) {
let _ = sender.send(message);
}
fn main() {
init_log();
let (sender, receiver) = mpsc::channel();
let logger_thread = thread::spawn(move || loop {
match receiver.recv() {
Ok(log_message) => info!("{}", log_message),
Err(_) => break,
}
});
// Sender move & drop semantic
{
let moved_sender = sender;
for i in 0..100_000 {
log_info(&moved_sender, format!("Hello this is {}", i));
}
}
let _ = logger_thread.join();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment