Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 22f35c6a authored by Abhishek Pandit-Subedi's avatar Abhishek Pandit-Subedi Committed by Abhishek Pandit-Subedi
Browse files

floss: Enable syslog on btmanagerd

Instead of logging via println!, start using syslog instead.

Bug: 190648196
Tag: #floss
Test: Verify btmanagerd writes to syslog on ChromeOS
Change-Id: I1eef5cba0839da15a464fc89465a53986332e6ef
parent b67f8bba
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ log = "0.4.14"
nix = "*"
regex = "1.5"
serde_json = "1.0"
syslog = "4.0"
tokio = { version = "1.0", features = ["fs", "macros", "rt-multi-thread", "sync"] }

[[bin]]
+9 −9
Original line number Diff line number Diff line
use log::Level;
use log::LevelFilter;
use serde_json::{Map, Value};

// Directory for Bluetooth hci devices
@@ -38,16 +38,16 @@ pub fn read_config() -> std::io::Result<String> {
    std::fs::read_to_string(BTMANAGERD_CONF)
}

pub fn get_log_level() -> Option<Level> {
pub fn get_log_level() -> Option<LevelFilter> {
    get_log_level_internal(read_config().ok()?)
}

fn get_log_level_internal(config: String) -> Option<Level> {
fn get_log_level_internal(config: String) -> Option<LevelFilter> {
    serde_json::from_str::<Value>(config.as_str())
        .ok()?
        .get("log_level")?
        .as_str()?
        .parse::<Level>()
        .parse::<LevelFilter>()
        .ok()
}

@@ -151,23 +151,23 @@ mod tests {
    fn parse_log_level() {
        assert_eq!(
            get_log_level_internal("{\"log_level\": \"error\"}".to_string()).unwrap(),
            Level::Error
            LevelFilter::Error
        );
        assert_eq!(
            get_log_level_internal("{\"log_level\": \"warn\"}".to_string()).unwrap(),
            Level::Warn
            LevelFilter::Warn
        );
        assert_eq!(
            get_log_level_internal("{\"log_level\": \"info\"}".to_string()).unwrap(),
            Level::Info
            LevelFilter::Info
        );
        assert_eq!(
            get_log_level_internal("{\"log_level\": \"debug\"}".to_string()).unwrap(),
            Level::Debug
            LevelFilter::Debug
        );
        assert_eq!(
            get_log_level_internal("{\"log_level\": \"trace\"}".to_string()).unwrap(),
            Level::Trace
            LevelFilter::Trace
        );
        assert_eq!(
            get_log_level_internal("{\"log_level\": \"random\"}".to_string()).is_none(),
+12 −26
Original line number Diff line number Diff line
@@ -11,27 +11,10 @@ use dbus::nonblock::SyncConnection;
use dbus_crossroads::Crossroads;
use dbus_projection::DisconnectWatcher;
use dbus_tokio::connection;
use log::{Level, Metadata, Record};
use log::LevelFilter;
use std::sync::atomic::AtomicBool;
use std::sync::{Arc, Mutex};

struct SimpleLogger;

impl log::Log for SimpleLogger {
    fn enabled(&self, metadata: &Metadata) -> bool {
        true || metadata.level() <= Level::Info
    }

    fn log(&self, record: &Record) {
        if self.enabled(record.metadata()) {
            println!("{} - {}", record.level(), record.args());
        }
    }

    fn flush(&self) {}
}

static LOGGER: SimpleLogger = SimpleLogger;
use syslog::{BasicLogger, Facility, Formatter3164};

#[derive(Clone)]
struct ManagerContext {
@@ -42,13 +25,16 @@ struct ManagerContext {

#[tokio::main]
pub async fn main() -> Result<(), Box<dyn std::error::Error>> {
    log::set_logger(&LOGGER)
        .map(|()| {
            log::set_max_level(
                config_util::get_log_level().unwrap_or(Level::Info).to_level_filter(),
            )
        })
        .unwrap();
    let formatter = Formatter3164 {
        facility: Facility::LOG_USER,
        hostname: None,
        process: "btmanagerd".into(),
        pid: 0,
    };

    let logger = syslog::unix(formatter).expect("could not connect to syslog");
    let _ = log::set_boxed_logger(Box::new(BasicLogger::new(logger)))
        .map(|()| log::set_max_level(config_util::get_log_level().unwrap_or(LevelFilter::Info)));

    // Initialize config util
    config_util::fix_config_file_format();
+1 −1
Original line number Diff line number Diff line
@@ -278,7 +278,7 @@ pub async fn mainloop<PM>(
            break;
        }

        println!("Message handler: {:?}", m);
        debug!("Message handler: {:?}", m);

        match m.unwrap() {
            // Adapter action has changed