1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
use clap::ValueEnum;
use serde::Deserialize;
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug, Default, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum LogLevel {
/// The "trace" level.
///
/// Designates very low priority, often extremely verbose, information.
Trace = 0,
/// The "debug" level.
///
/// Designates lower priority information.
#[default]
Debug = 1,
/// The "info" level.
///
/// Designates useful information.
Info = 2,
/// The "warn" level.
///
/// Designates hazardous situations.
Warn = 3,
/// The "error" level.
///
/// Designates very serious errors.
Error = 4,
}
impl From<LogLevel> for tracing::Level {
fn from(value: LogLevel) -> Self {
match value {
LogLevel::Trace => tracing::Level::TRACE,
LogLevel::Debug => tracing::Level::DEBUG,
LogLevel::Info => tracing::Level::INFO,
LogLevel::Warn => tracing::Level::WARN,
LogLevel::Error => tracing::Level::ERROR,
}
}
}
#[cfg(test)]
mod tests {
use crate::config::logging::LogLevel;
fn check(level: LogLevel, value: &str) {
let level = tracing::Level::from(level);
assert_eq!(level.to_string().to_lowercase(), value);
}
#[test]
fn loglevel() {
let level = LogLevel::Trace;
check(level, "trace");
let level = LogLevel::Debug;
check(level, "debug");
let level = LogLevel::Info;
check(level, "info");
let level = LogLevel::Warn;
check(level, "warn");
let level = LogLevel::Error;
check(level, "error");
}
}
|