jannie

jannie (mirror)
Log | Files | Refs | README | LICENSE

logging.rs (2360B)


      1 use std::path::PathBuf;
      2 
      3 use tracing::Level;
      4 
      5 #[derive(Clone, Debug, Default, serde::Deserialize)]
      6 pub struct LoggingConfig {
      7     #[serde(default)]
      8     pub file: Option<FileConfig>,
      9 }
     10 
     11 #[derive(Clone, Debug, serde::Deserialize)]
     12 pub struct FileConfig {
     13     pub directory: PathBuf,
     14     pub prefix: String,
     15     #[serde(flatten)]
     16     pub subscriber: SubscriberConfig,
     17 }
     18 
     19 #[derive(Clone, Debug, serde::Deserialize)]
     20 pub struct SubscriberConfig {
     21     #[serde(default)]
     22     pub format: LogFormat,
     23     #[serde(default)]
     24     pub level: LogLevel,
     25     #[serde(default)]
     26     pub target_filters: Vec<TargetFilter>,
     27     #[serde(default = "SubscriberConfig::default_ansi")]
     28     pub ansi: bool,
     29     #[serde(default = "SubscriberConfig::default_target")]
     30     pub target: bool,
     31     #[serde(default = "SubscriberConfig::default_file_path")]
     32     pub file_path: bool,
     33     #[serde(default = "SubscriberConfig::default_line_number")]
     34     pub line_number: bool,
     35 }
     36 
     37 impl SubscriberConfig {
     38     pub fn default_ansi() -> bool {
     39         false
     40     }
     41 
     42     pub fn default_target() -> bool {
     43         true
     44     }
     45 
     46     pub fn default_file_path() -> bool {
     47         false
     48     }
     49 
     50     pub fn default_line_number() -> bool {
     51         false
     52     }
     53 }
     54 
     55 #[derive(Clone, Debug, serde::Deserialize)]
     56 #[serde(rename_all = "snake_case")]
     57 pub struct TargetFilter {
     58     #[serde(default)]
     59     #[serde(rename = "type")]
     60     pub filter_type: TargetFilterType,
     61     pub pattern: String,
     62 }
     63 
     64 #[derive(Clone, Debug, Copy, Default, serde::Deserialize)]
     65 #[serde(rename_all = "snake_case")]
     66 pub enum TargetFilterType {
     67     #[default]
     68     Whitelist,
     69     Blacklist,
     70 }
     71 
     72 #[derive(Clone, Debug, Copy, Default, serde::Deserialize)]
     73 #[serde(rename_all = "snake_case")]
     74 pub enum LogFormat {
     75     #[default]
     76     Plain,
     77     Json,
     78 }
     79 
     80 #[derive(Clone, Debug, Copy, Default, serde::Deserialize)]
     81 #[serde(rename_all = "snake_case")]
     82 pub enum LogLevel {
     83     #[default]
     84     Off,
     85     Error,
     86     Warn,
     87     Info,
     88     Debug,
     89     Trace,
     90 }
     91 
     92 impl From<LogLevel> for Option<Level> {
     93     fn from(value: LogLevel) -> Self {
     94         match value {
     95             LogLevel::Off => None,
     96             LogLevel::Error => Some(Level::ERROR),
     97             LogLevel::Warn => Some(Level::WARN),
     98             LogLevel::Info => Some(Level::INFO),
     99             LogLevel::Debug => Some(Level::DEBUG),
    100             LogLevel::Trace => Some(Level::TRACE),
    101         }
    102     }
    103 }