1use std::result;
2use log;
3
4use fern;
5
6pub fn init_logger(
7 quiet: bool,
8 verbosity: u8,
9 stderr: bool,
10) -> result::Result<(), log::SetLoggerError> {
11 let level = if quiet {
12 log::LogLevelFilter::Off
13 } else {
14 match verbosity {
15 0 => log::LogLevelFilter::Warn,
16 1 => log::LogLevelFilter::Info,
17 2 => log::LogLevelFilter::Debug,
18 3 => log::LogLevelFilter::Trace,
19 _ => unreachable!(),
20 }
21 };
22 let output = if stderr {
23 fern::Output::stderr("\n")
24 } else {
25 fern::Output::stdout("\n")
26 };
27
28 fern::Dispatch::new()
29 .format(|out, msg, record| {
30 out.finish(format_args!("{}: {}", record.level(), msg))
31 })
32 .level(level)
33 .chain(output)
34 .apply()
35}
36
37#[cfg(test)]
38pub fn init_logger_test() {
39 match init_logger(false, 3, false) {
40 Ok(_) => {}
41 Err(_) => {}
42 }
43}