Skip to content

Commit

Permalink
Merge pull request #33 from thibault-cne/issue/30
Browse files Browse the repository at this point in the history
Made the log config optional
  • Loading branch information
thibault-cne authored Aug 2, 2024
2 parents 816caea + 1551c92 commit 6143d8c
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 23 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,15 @@ The `config.yml` file is used to configure the `dnsr server. The following is th
# This file is located at the path in the `DNSR_CONFIG` environment variable or in the `/etc/dnsr/config.yml` file.

# The log configuration.
# This part is optional and every field is optional.
# If not present, the values below are used as defaults.
log:
# The log level. This can be one of the following: trace, debug, info, warn, error, or off.
level: info
# Enable the metrics.
enable_metrics: true
# Enable thread ID in logs.
enable_thread_id: true
enable_thread_id: false
# Log on stderr.
stderr: false

Expand Down
8 changes: 5 additions & 3 deletions config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@
# This file is located at the path in the `DNSR_CONFIG` environment variable or in the `config.yml` file in the current directory.

# The log configuration.
# This part is optional and every field is optional.
# If not present, the values below are used as defaults.
log:
# The log level. This can be one of the following: trace, debug, info, warn, error, or off.
level: debug
level: info
# Enable the metrics.
enable_metrics: false
enable_metrics: true
# Enable thread ID in logs.
enable_thread_id: true
enable_thread_id: false
# Log on stderr.
stderr: false

Expand Down
58 changes: 43 additions & 15 deletions src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ pub const BASE_CONFIG_FILE: &str = "/etc/dnsr/config.yml";

#[derive(Deserialize, Clone, Debug)]
pub struct Config {
pub log: LogConfig,
log: Option<LogConfig>,

pub keys: Keys,
}

Expand All @@ -22,6 +23,10 @@ impl Config {
pub fn tsig_path(&self) -> &Path {
Path::new(TSIG_PATH)
}

pub fn log_config(&self) -> LogConfig {
self.log.unwrap_or_default()
}
}

impl TryFrom<&Vec<u8>> for Config {
Expand All @@ -32,27 +37,50 @@ impl TryFrom<&Vec<u8>> for Config {
}
}

#[derive(Deserialize, Clone, Copy, Debug)]
#[derive(Deserialize, Default, Clone, Copy, Debug)]
pub struct LogConfig {
#[serde(deserialize_with = "de_level_filter")]
pub level: log::LevelFilter,
pub enable_metrics: bool,
pub enable_thread_id: bool,
pub stderr: bool,
#[serde(deserialize_with = "de_opt_level_filter")]
level: Option<log::LevelFilter>,
enable_metrics: Option<bool>,
enable_thread_id: Option<bool>,
stderr: Option<bool>,
}

impl LogConfig {
pub fn level(&self) -> log::LevelFilter {
self.level.unwrap_or(log::LevelFilter::Info)
}

pub fn enable_metrics(&self) -> bool {
self.enable_metrics.unwrap_or(true)
}

pub fn enable_thread_id(&self) -> bool {
self.enable_thread_id.unwrap_or(false)
}

pub fn stderr(&self) -> bool {
self.stderr.unwrap_or(false)
}
}

fn de_level_filter<'de, D>(deserializer: D) -> std::result::Result<log::LevelFilter, D::Error>
fn de_opt_level_filter<'de, D>(
deserializer: D,
) -> std::result::Result<Option<log::LevelFilter>, D::Error>
where
D: serde::Deserializer<'de>,
{
let s: LevelFilter = Deserialize::deserialize(deserializer)?;
let s: Option<LevelFilter> = Deserialize::deserialize(deserializer)?;
let Some(s) = s else {
return Ok(None);
};
match s {
LevelFilter::Off => Ok(log::LevelFilter::Off),
LevelFilter::Error => Ok(log::LevelFilter::Error),
LevelFilter::Warn => Ok(log::LevelFilter::Warn),
LevelFilter::Info => Ok(log::LevelFilter::Info),
LevelFilter::Debug => Ok(log::LevelFilter::Debug),
LevelFilter::Trace => Ok(log::LevelFilter::Trace),
LevelFilter::Off => Ok(Some(log::LevelFilter::Off)),
LevelFilter::Error => Ok(Some(log::LevelFilter::Error)),
LevelFilter::Warn => Ok(Some(log::LevelFilter::Warn)),
LevelFilter::Info => Ok(Some(log::LevelFilter::Info)),
LevelFilter::Debug => Ok(Some(log::LevelFilter::Debug)),
LevelFilter::Trace => Ok(Some(log::LevelFilter::Trace)),
}
}

Expand Down
8 changes: 4 additions & 4 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,10 @@ async fn main() {

// Initialize the custom logger
logger::Logger::new()
.with_level(config.log.level)
.with_metrics(config.log.enable_metrics)
.with_stderr(config.log.stderr)
.with_thread(config.log.enable_thread_id)
.with_level(config.log_config().level())
.with_metrics(config.log_config().enable_metrics())
.with_stderr(config.log_config().stderr())
.with_thread(config.log_config().enable_thread_id())
.init()
.expect("Failed to initialize custom logger");

Expand Down

0 comments on commit 6143d8c

Please sign in to comment.