Bladeren bron

Configure a logger

Andrew Swistak 6 jaren geleden
bovenliggende
commit
1833029d2f
5 gewijzigde bestanden met toevoegingen van 66 en 0 verwijderingen
  1. 23 0
      Cargo.lock
  2. 4 0
      Cargo.toml
  3. 6 0
      src/cli.yml
  4. 27 0
      src/logger/mod.rs
  5. 6 0
      src/main.rs

+ 23 - 0
Cargo.lock

@@ -5,6 +5,7 @@ name = "advent-of-code-2019"
 version = "0.1.0"
 dependencies = [
  "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -29,6 +30,11 @@ name = "bitflags"
 version = "1.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
 [[package]]
 name = "clap"
 version = "2.33.0"
@@ -49,6 +55,20 @@ name = "libc"
 version = "0.2.66"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[[package]]
+name = "log"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
 [[package]]
 name = "strsim"
 version = "0.8.0"
@@ -100,8 +120,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
 "checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
 "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
 "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
 "checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
+"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
+"checksum serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)" = "1217f97ab8e8904b57dd22eb61cde455fa7446a9c1cf43966066da047c1f3702"
 "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
 "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
 "checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"

+ 4 - 0
Cargo.toml

@@ -7,3 +7,7 @@ edition = "2018"
 [dependencies.clap]
 version = "~2.33"
 features = ["yaml"]
+
+[dependencies.log]
+version = "~0.4.8"
+features = ["std", "serde"]

+ 6 - 0
src/cli.yml

@@ -20,3 +20,9 @@ args:
         long: prompt
         help: Accept input from user
         takes_value: false
+    - log_level:
+        short: v
+        long: verbose
+        help: print debug statements
+        takes_value: false
+        multiple: true

+ 27 - 0
src/logger/mod.rs

@@ -0,0 +1,27 @@
+extern crate log;
+use log::{Level, LevelFilter, Metadata, Record, SetLoggerError};
+
+pub struct Logger;
+
+impl log::Log for Logger {
+    fn enabled(&self, metadata: &Metadata) -> bool {
+        metadata.level() <= Level::Trace
+    }
+
+    fn log(&self, record: &Record) {
+        if self.enabled(record.metadata()) {
+            println!("{} - {}", record.level(), record.args());
+        }
+    }
+
+    fn flush(&self) {}
+}
+
+pub fn init(level: u8) -> Result<(), SetLoggerError> {
+    let level_filter: LevelFilter = match level {
+        0 => LevelFilter::Off,
+        _ => LevelFilter::Debug,
+    };
+
+    log::set_boxed_logger(Box::new(Logger)).map(|()| log::set_max_level(level_filter))
+}

+ 6 - 0
src/main.rs

@@ -1,12 +1,15 @@
 #[macro_use]
 extern crate clap;
 
+mod logger;
+
 mod day_1;
 mod day_2;
 mod day_3;
 mod day_4;
 
 mod puzzle;
+
 use crate::puzzle::options::Options;
 use crate::puzzle::traits::{Create, Solve};
 
@@ -17,6 +20,9 @@ fn main() {
     let day = opt_str_to_int(matches.value_of("day"));
     let puzzle_number = opt_str_to_int(matches.value_of("puzzle"));
     let prompt = matches.is_present("prompt");
+    let log_level = matches.occurrences_of("log_level");
+
+    logger::init(log_level as u8).unwrap_or_else(|e| panic!("failed to init logger {}", e));
 
     let options = Options {
         puzzle: puzzle_number,