Skip to content

Commit 325941b

Browse files
committed
move logging setup out of the main file to avoid clutter
1 parent 78d958e commit 325941b

File tree

2 files changed

+40
-25
lines changed

2 files changed

+40
-25
lines changed

src/logging.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
2+
//! This module provides functionality for setting up logging
3+
4+
use env_logger::Builder;
5+
use log::LevelFilter;
6+
use std::fs::File;
7+
use std::io::Write;
8+
use std::path::PathBuf;
9+
10+
/// Sets up the logger based on verbosity and optional log file path.
11+
pub fn setup_logger(verbosity: u8, log_output: Option<PathBuf>) {
12+
let mut builder = Builder::from_default_env();
13+
builder.format_timestamp(None);
14+
15+
builder.filter_level(match verbosity {
16+
0 => LevelFilter::Warn,
17+
1 => LevelFilter::Info,
18+
2 => LevelFilter::Debug,
19+
_ => LevelFilter::Trace,
20+
});
21+
22+
if let Some(log_path) = log_output {
23+
match File::create(&log_path) {
24+
Ok(file) => {
25+
let writer = Box::new(file) as Box<dyn Write + Send>;
26+
builder.target(env_logger::Target::Pipe(writer));
27+
}
28+
Err(_) => {
29+
eprintln!("Could not create log file at {}. Defaulting to stderr.", log_path.display());
30+
builder.target(env_logger::Target::Stderr);
31+
}
32+
}
33+
} else {
34+
builder.target(env_logger::Target::Stderr);
35+
}
36+
37+
builder.init();
38+
}

src/main.rs

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ mod semigroup;
1515
mod solution;
1616
mod solver;
1717
mod strategy;
18-
use log::LevelFilter;
1918
use log::info;
19+
mod logging;
2020

2121

2222
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
@@ -99,30 +99,7 @@ fn main() {
9999
let args = Args::parse();
100100

101101
// set up logging
102-
let mut builder = env_logger::Builder::from_default_env();
103-
builder.format_timestamp(None);
104-
105-
match &args.verbosity {
106-
0 => builder.filter_level(LevelFilter::Warn),
107-
1 => builder.filter_level(LevelFilter::Info),
108-
2 => builder.filter_level(LevelFilter::Debug),
109-
_ => builder.filter_level(LevelFilter::Trace),
110-
};
111-
112-
// Decide logging output: file or stdout
113-
if let Some(log_path) = args.log_output {
114-
if let Ok(file) = File::create(&log_path) {
115-
let writer = Box::new(file) as Box<dyn Write + Send>;
116-
builder.target(env_logger::Target::Pipe(writer));
117-
} else {
118-
eprintln!("Could not create log file at {}. Defaulting to stderr.", log_path.display());
119-
builder.target(env_logger::Target::Stderr);
120-
}
121-
} else {
122-
builder.target(env_logger::Target::Stderr);
123-
}
124-
125-
builder.init();
102+
logging::setup_logger(args.verbosity, args.log_output);
126103

127104
// parse the input file
128105
let nfa = nfa::Nfa::load_from_file(&args.filename, &args.input_format, &args.state_ordering);

0 commit comments

Comments
 (0)