myc

Self-custodial remote signer for Radroots apps
git clone https://radroots.dev/git/myc.git
Log | Files | Refs | README | LICENSE

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 }