LoGin 7b32f5080f
增加内存分配日志监视器 (#424)
* 完成内存日志监视,并输出日志到文件
* 修复进程退出后,procfs查看进程status文件会崩溃的问题
* 修复signal唤醒进程的判断条件问题
2023-11-07 21:39:27 +08:00

52 lines
1.2 KiB
Rust

use std::sync::mpsc;
use log::LevelFilter;
use simple_logger::LogBackend;
use crate::command::CommandLineArgs;
/// Initialize the logging system.
pub fn init(cmd_args: &CommandLineArgs) -> LoggingInitResult {
let mut builder = simple_logger::SimpleLogger::new().with_level(LevelFilter::Info);
let mut result = LoggingInitResult::new(None);
if cmd_args.tui {
let channel: (mpsc::Sender<String>, mpsc::Receiver<String>) = mpsc::channel::<String>();
builder = builder.with_backend(Box::new(TUILoggingBackend::new(channel.0)));
result.tui_receiver = Some(channel.1);
}
builder.init().expect("failed to initialize logging");
return result;
}
#[derive(Debug)]
pub struct LoggingInitResult {
/// Logging backend receiver.
pub tui_receiver: Option<mpsc::Receiver<String>>,
}
impl LoggingInitResult {
pub fn new(tui_receiver: Option<mpsc::Receiver<String>>) -> Self {
Self { tui_receiver }
}
}
pub struct TUILoggingBackend {
sender: mpsc::Sender<String>,
}
impl TUILoggingBackend {
pub fn new(sender: mpsc::Sender<String>) -> Self {
Self { sender }
}
}
impl LogBackend for TUILoggingBackend {
fn log(&self, message: String) {
self.sender.send(message).ok();
}
}