Fix aggregation

This commit is contained in:
Matthias Beyer 2017-08-28 11:40:50 +02:00
parent df51736c87
commit 64f96092cd
2 changed files with 16 additions and 12 deletions

View file

@ -28,6 +28,7 @@ generate_error_types!(RuntimeError, RuntimeErrorKind,
ConfigReadError => "Error while reading the configuration", ConfigReadError => "Error while reading the configuration",
ConfigTypeError => "Error while reading the configuration: Type Error", ConfigTypeError => "Error while reading the configuration: Type Error",
GlobalLogLevelConfigMissing => "Global config 'imag.logging.level' missing", GlobalLogLevelConfigMissing => "Global config 'imag.logging.level' missing",
GlobalDestinationConfigMissing => "Global config 'imag.logging.destinations' missing",
InvalidLogLevelSpec => "Invalid log level specification: Only 'trace', 'debug', 'info', 'warn', 'error' are allowed", InvalidLogLevelSpec => "Invalid log level specification: Only 'trace', 'debug', 'info', 'warn', 'error' are allowed",
TomlReadError => "Error while reading in TOML document", TomlReadError => "Error while reading in TOML document",
TemplateStringRegistrationError => "Error while registering logging template string", TemplateStringRegistrationError => "Error while registering logging template string",

View file

@ -50,11 +50,11 @@ impl Default for LogDestination {
} }
struct ModuleSettings { struct ModuleSettings {
enabled: bool, enabled: bool,
level: LogLevel, level: Option<LogLevel>,
#[allow(unused)] #[allow(unused)]
destinations: Vec<LogDestination>, destinations: Option<Vec<LogDestination>>,
} }
/// Logger implementation for `log` crate. /// Logger implementation for `log` crate.
@ -156,7 +156,7 @@ impl Log for ImagLogger {
self.module_settings self.module_settings
.get(log_target) .get(log_target)
.map(|module_setting| { .map(|module_setting| {
if module_setting.enabled && module_setting.level >= log_level { if module_setting.enabled && module_setting.level.unwrap_or(self.global_loglevel) >= log_level {
let _ = write!(stderr(), "{}\n", logtext); let _ = write!(stderr(), "{}\n", logtext);
} }
}) })
@ -248,7 +248,7 @@ fn aggregate_global_destinations(matches: &ArgMatches, config: Option<&Configura
{ {
Ok(Some(&Value::Array(ref a))) => translate_destinations(a), Ok(Some(&Value::Array(ref a))) => translate_destinations(a),
Ok(Some(_)) => Err(EK::ConfigTypeError.into_error()), Ok(Some(_)) => Err(EK::ConfigTypeError.into_error()),
Ok(None) => Err(EK::GlobalLogLevelConfigMissing.into_error()), Ok(None) => Err(EK::GlobalDestinationConfigMissing.into_error()),
Err(e) => Err(e) Err(e) => Err(e)
}, },
None => { None => {
@ -286,7 +286,7 @@ fn aggregate_global_format(
{ {
Ok(Some(&Value::String(ref s))) => Ok(s.clone()), Ok(Some(&Value::String(ref s))) => Ok(s.clone()),
Ok(Some(_)) => Err(EK::ConfigTypeError.into_error()), Ok(Some(_)) => Err(EK::ConfigTypeError.into_error()),
Ok(None) => Err(EK::GlobalLogLevelConfigMissing.into_error()), Ok(None) => Err(error_kind_if_missing.into_error()),
Err(e) => Err(e) Err(e) => Err(e)
}, },
None => match matches.value_of(cli_match_name).map(String::from) { None => match matches.value_of(cli_match_name).map(String::from) {
@ -360,23 +360,23 @@ fn aggregate_module_settings(_matches: &ArgMatches, config: Option<&Configuratio
for (module_name, v) in t { for (module_name, v) in t {
let destinations = try!(match v.read("destinations") { let destinations = try!(match v.read("destinations") {
Ok(Some(&Value::Array(ref a))) => translate_destinations(a), Ok(Some(&Value::Array(ref a))) => translate_destinations(a).map(Some),
Ok(None) => Ok(None),
Ok(Some(_)) => Err(EK::ConfigTypeError.into_error()), Ok(Some(_)) => Err(EK::ConfigTypeError.into_error()),
Ok(None) => Err(EK::GlobalLogLevelConfigMissing.into_error()),
Err(e) => Err(e).map_err_into(EK::TomlReadError), Err(e) => Err(e).map_err_into(EK::TomlReadError),
}); });
let level = try!(match v.read("level") { let level = try!(match v.read("level") {
Ok(Some(&Value::String(ref s))) => match_log_level_str(s), Ok(Some(&Value::String(ref s))) => match_log_level_str(s).map(Some),
Ok(None) => Ok(None),
Ok(Some(_)) => Err(EK::ConfigTypeError.into_error()), Ok(Some(_)) => Err(EK::ConfigTypeError.into_error()),
Ok(None) => Err(EK::GlobalLogLevelConfigMissing.into_error()),
Err(e) => Err(e).map_err_into(EK::TomlReadError), Err(e) => Err(e).map_err_into(EK::TomlReadError),
}); });
let enabled = try!(match v.read("enabled") { let enabled = try!(match v.read("enabled") {
Ok(Some(&Value::Boolean(b))) => Ok(b), Ok(Some(&Value::Boolean(b))) => Ok(b),
Ok(None) => Ok(false),
Ok(Some(_)) => Err(EK::ConfigTypeError.into_error()), Ok(Some(_)) => Err(EK::ConfigTypeError.into_error()),
Ok(None) => Err(EK::GlobalLogLevelConfigMissing.into_error()),
Err(e) => Err(e).map_err_into(EK::TomlReadError), Err(e) => Err(e).map_err_into(EK::TomlReadError),
}); });
@ -393,7 +393,10 @@ fn aggregate_module_settings(_matches: &ArgMatches, config: Option<&Configuratio
Ok(settings) Ok(settings)
}, },
Ok(Some(_)) => Err(EK::ConfigTypeError.into_error()), Ok(Some(_)) => Err(EK::ConfigTypeError.into_error()),
Ok(None) => Err(EK::GlobalLogLevelConfigMissing.into_error()), Ok(None) => {
// No modules configured. This is okay!
Ok(BTreeMap::new())
},
Err(e) => Err(e), Err(e) => Err(e),
}, },
None => { None => {