1 use bt_common::init_flags; 2 use log::LevelFilter; 3 use syslog::{BasicLogger, Facility, Formatter3164}; 4 5 /// API to modify log levels. 6 pub trait IBluetoothLogging { 7 /// Check whether debug logging is enabled. is_debug_enabled(&self) -> bool8 fn is_debug_enabled(&self) -> bool; 9 10 /// Change whether debug logging is enabled. set_debug_logging(&mut self, enabled: bool)11 fn set_debug_logging(&mut self, enabled: bool); 12 } 13 14 /// Logging related implementation. 15 pub struct BluetoothLogging { 16 is_debug: bool, 17 } 18 19 impl BluetoothLogging { new(is_debug: bool, log_output: &str) -> Self20 pub fn new(is_debug: bool, log_output: &str) -> Self { 21 let level = if is_debug { LevelFilter::Debug } else { LevelFilter::Info }; 22 23 if log_output == "stderr" { 24 env_logger::Builder::new().filter(None, level).init(); 25 } else { 26 let formatter = Formatter3164 { 27 facility: Facility::LOG_USER, 28 hostname: None, 29 process: "btadapterd".into(), 30 pid: 0, 31 }; 32 33 let logger = syslog::unix(formatter).expect("could not connect to syslog"); 34 let _ = log::set_boxed_logger(Box::new(BasicLogger::new(logger))) 35 .map(|()| log::set_max_level(level)); 36 } 37 38 Self { is_debug } 39 } 40 } 41 42 impl IBluetoothLogging for BluetoothLogging { is_debug_enabled(&self) -> bool43 fn is_debug_enabled(&self) -> bool { 44 self.is_debug 45 } 46 set_debug_logging(&mut self, enabled: bool)47 fn set_debug_logging(&mut self, enabled: bool) { 48 self.is_debug = enabled; 49 50 // Update log level in Linux stack. 51 let level = if self.is_debug { LevelFilter::Debug } else { LevelFilter::Info }; 52 log::set_max_level(level); 53 54 // Update log level in libbluetooth. 55 let level = 56 if self.is_debug { init_flags::LOG_TAG_DEBUG } else { init_flags::LOG_TAG_INFO }; 57 init_flags::update_default_log_level(level); 58 59 // Mark the start of debug logging with a debug print. 60 if self.is_debug { 61 log::debug!("Debug logging successfully enabled!"); 62 } 63 64 log::info!("Setting debug logging to {}", self.is_debug); 65 } 66 } 67