ax_core/node/components/logging/
mod.rs

1use self::logging_sink::LoggingSink;
2use super::{Component, ComponentRequest};
3use crate::{node::node_settings::Settings, util::formats::LogSeverity};
4use anyhow::Result;
5use crossbeam::channel::{Receiver, Sender};
6use parking_lot::Mutex;
7use std::sync::Arc;
8
9mod logging_sink;
10pub struct Logging {
11    rx: Receiver<ComponentRequest<()>>,
12    logging_sink: Arc<Mutex<LoggingSink>>,
13}
14
15impl Component<(), LogSeverity> for Logging {
16    fn get_type() -> &'static str {
17        "logging"
18    }
19    fn get_rx(&self) -> &Receiver<ComponentRequest<()>> {
20        &self.rx
21    }
22    fn handle_request(&mut self, _: ()) -> Result<()> {
23        Ok(())
24    }
25    fn extract_settings(&self, settings: Settings) -> Result<LogSeverity> {
26        Ok(settings.admin.log_levels.node)
27    }
28    fn set_up(&mut self, settings: LogSeverity) -> bool {
29        if let Err(e) = self.logging_sink.lock().set_level(settings) {
30            eprintln!("Error setting new log level: {}", e);
31        }
32        false
33    }
34    fn start(&mut self, snd: Sender<anyhow::Result<()>>) -> Result<()> {
35        snd.send(Ok(()))?;
36        Ok(())
37    }
38    fn stop(&mut self) -> Result<()> {
39        Ok(())
40    }
41}
42impl Logging {
43    pub fn new(rx: Receiver<ComponentRequest<()>>, level: LogSeverity, log_no_color: bool, log_as_json: bool) -> Self {
44        let logging_sink = Arc::new(Mutex::new(LoggingSink::new(level, log_no_color, log_as_json)));
45        Self { rx, logging_sink }
46    }
47    pub fn set_log_level(&self, level: LogSeverity) -> anyhow::Result<()> {
48        self.logging_sink.lock().set_level(level)?;
49        Ok(())
50    }
51}