logging.rs (2512B)
1 use crate::config::MycLoggingConfig; 2 use crate::error::MycError; 3 use radroots_log::{LogFileLayout, LoggingOptions}; 4 5 pub fn init_logging(config: &MycLoggingConfig) -> Result<(), MycError> { 6 radroots_log::init_logging(LoggingOptions { 7 dir: config.output_dir.clone(), 8 file_name: "log".to_owned(), 9 stdout: config.stdout, 10 default_level: Some(config.filter.clone()), 11 file_layout: LogFileLayout::DatedFileName, 12 }) 13 .map_err(|source| MycError::InvalidOperation(format!("failed to initialize logging: {source}"))) 14 } 15 16 #[cfg(test)] 17 mod tests { 18 use radroots_log::{LogFileLayout, LoggingOptions}; 19 use std::path::PathBuf; 20 21 use crate::config::MycConfig; 22 23 #[test] 24 fn config_parses_logging_output_dir_and_stdout() { 25 let config = MycConfig::from_env_str( 26 r#" 27 MYC_LOGGING_FILTER=info,myc=debug 28 MYC_LOGGING_OUTPUT_DIR=/tmp/myc-logs 29 MYC_LOGGING_STDOUT=false 30 MYC_PATHS_STATE_DIR=/tmp/myc 31 MYC_IDENTITY_SIGNER_PATH=/tmp/signer.json 32 MYC_IDENTITY_USER_PATH=/tmp/user.json 33 MYC_DISCOVERY_ENABLED=false 34 MYC_TRANSPORT_ENABLED=false 35 MYC_TRANSPORT_CONNECT_TIMEOUT_SECS=10 36 "#, 37 ) 38 .expect("config"); 39 40 assert_eq!( 41 config.logging.output_dir, 42 Some(PathBuf::from("/tmp/myc-logs")) 43 ); 44 assert!(!config.logging.stdout); 45 } 46 47 #[test] 48 fn logging_options_resolve_real_dated_file_path() { 49 let config = MycConfig::from_env_str( 50 r#" 51 MYC_LOGGING_FILTER=info,myc=debug 52 MYC_LOGGING_OUTPUT_DIR=/tmp/myc-logs 53 MYC_LOGGING_STDOUT=false 54 MYC_PATHS_STATE_DIR=/tmp/myc 55 MYC_IDENTITY_SIGNER_PATH=/tmp/signer.json 56 MYC_IDENTITY_USER_PATH=/tmp/user.json 57 MYC_DISCOVERY_ENABLED=false 58 MYC_TRANSPORT_ENABLED=false 59 MYC_TRANSPORT_CONNECT_TIMEOUT_SECS=10 60 "#, 61 ) 62 .expect("config"); 63 64 let path = LoggingOptions { 65 dir: config.logging.output_dir.clone(), 66 file_name: "log".to_owned(), 67 stdout: config.logging.stdout, 68 default_level: Some(config.logging.filter.clone()), 69 file_layout: LogFileLayout::DatedFileName, 70 } 71 .resolved_current_log_file_path() 72 .expect("resolved log path"); 73 74 assert_eq!( 75 path.parent(), 76 Some(PathBuf::from("/tmp/myc-logs").as_path()) 77 ); 78 assert!( 79 path.file_name() 80 .and_then(|value| value.to_str()) 81 .is_some_and(|value| value.ends_with(".log")) 82 ); 83 } 84 }