hyperlane_log/log/
thread.rs1use crate::Log;
2use recoverable_spawn::{sync::*, JoinHandle};
3use std::{sync::Arc, thread::sleep, time::Duration};
4
5#[inline]
6pub fn log_run(log: &Log) -> JoinHandle<()> {
7 let arc_log: Arc<Log> = Arc::new(log.clone());
8 let log_thread: JoinHandle<()> = recoverable_spawn(move || {
9 let arc_error_log_clone: Arc<Log> = Arc::clone(&arc_log);
10 let arc_info_log_clone: Arc<Log> = Arc::clone(&arc_log);
11 let arc_debug_log_clone: Arc<Log> = Arc::clone(&arc_log);
12 let error_log_thread: JoinHandle<()> = recoverable_spawn(move || {
13 let interval_millis: u64 = *arc_error_log_clone.get_interval_millis() as u64;
14 loop {
15 arc_error_log_clone.write_error();
16 sleep(Duration::from_millis(interval_millis));
17 }
18 });
19 let info_log_thread: JoinHandle<()> = recoverable_spawn(move || {
20 let interval_millis: u64 = *arc_info_log_clone.get_interval_millis() as u64;
21 loop {
22 arc_info_log_clone.write_info();
23 sleep(Duration::from_millis(interval_millis));
24 }
25 });
26 let debug_log_thread: JoinHandle<()> = recoverable_spawn(move || {
27 let interval_millis: u64 = *arc_debug_log_clone.get_interval_millis() as u64;
28 loop {
29 arc_debug_log_clone.write_debug();
30 sleep(Duration::from_millis(interval_millis));
31 }
32 });
33 let _ = error_log_thread.join();
34 let _ = info_log_thread.join();
35 let _ = debug_log_thread.join();
36 });
37 log_thread
38}