hyperlane_log/log/
thread.rs

1use 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}