logging.rs (1608B)
1 use std::path::PathBuf; 2 3 use radroots_log::{LogFileLayout, LoggingOptions}; 4 5 use crate::runtime::config::LoggingConfig; 6 7 const CLI_LOG_FILE_NAME: &str = "radroots-cli.log"; 8 9 #[derive(Debug, Clone, PartialEq, Eq)] 10 pub struct LoggingState { 11 pub initialized: bool, 12 pub current_file: Option<PathBuf>, 13 } 14 15 pub fn initialize_logging(config: &LoggingConfig) -> Result<LoggingState, radroots_log::Error> { 16 let options = to_radroots_logging_options(config); 17 let state = LoggingState { 18 initialized: true, 19 current_file: options.resolved_current_log_file_path(), 20 }; 21 radroots_log::init_logging(options)?; 22 Ok(state) 23 } 24 25 pub fn to_radroots_logging_options(config: &LoggingConfig) -> LoggingOptions { 26 LoggingOptions { 27 dir: config.directory.clone(), 28 file_name: CLI_LOG_FILE_NAME.to_owned(), 29 stdout: config.stdout, 30 default_level: Some(config.filter.clone()), 31 file_layout: LogFileLayout::PrefixedDate, 32 } 33 } 34 35 #[cfg(test)] 36 mod tests { 37 use super::to_radroots_logging_options; 38 use crate::runtime::config::LoggingConfig; 39 use std::path::PathBuf; 40 41 #[test] 42 fn logging_options_use_cli_file_name() { 43 let options = to_radroots_logging_options(&LoggingConfig { 44 filter: "info".to_owned(), 45 directory: Some(PathBuf::from("logs")), 46 stdout: false, 47 }); 48 assert_eq!(options.file_name, "radroots-cli.log"); 49 assert_eq!(options.default_level.as_deref(), Some("info")); 50 assert_eq!(options.dir, Some(PathBuf::from("logs"))); 51 assert!(!options.stdout); 52 } 53 }