aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTruongSinh Tran-Nguyen <i@truongsinh.pro>2023-04-26 12:50:16 -0700
committerKent Overstreet <kent.overstreet@linux.dev>2023-04-26 17:46:23 -0400
commit47ec3ed6edb90c1117d0c79c382f03a3ed87c5ca (patch)
tree2aae100d0d553104b8276e8785865a7fc7b84991
parent4f6b28f54f09ee4498466d39cf550faeedd5614a (diff)
downloadbcachefs-tools-47ec3ed6edb90c1117d0c79c382f03a3ed87c5ca.tar.gz
chore: logger for idiomatic style and expanded logging levels
Improve the Rust logger by adhering to idiomatic Rust conventions and incorporating additional logging levels: warn, debug, and trace. Signed-off-by: TruongSinh Tran-Nguyen <i@truongsinh.pro>
-rw-r--r--rust-src/Cargo.toml2
-rw-r--r--rust-src/bch_bindgen/src/lib.rs1
-rw-r--r--rust-src/bch_bindgen/src/log.rs57
-rw-r--r--rust-src/src/cmd_list.rs3
-rw-r--r--rust-src/src/cmd_mount.rs19
-rw-r--r--rust-src/src/key.rs3
-rw-r--r--rust-src/src/lib.rs1
-rw-r--r--rust-src/src/logger.rs28
8 files changed, 48 insertions, 66 deletions
diff --git a/rust-src/Cargo.toml b/rust-src/Cargo.toml
index 64b195ca..92a3853f 100644
--- a/rust-src/Cargo.toml
+++ b/rust-src/Cargo.toml
@@ -9,7 +9,7 @@ crate-type = ["staticlib"]
[dependencies]
atty = "0.2.14"
-log = "0.4"
+log = { version = "0.4", features = ["std"] }
chrono = "0.4"
colored = "2"
clap = { version = "4.0.32", features = ["derive", "wrap_help"] }
diff --git a/rust-src/bch_bindgen/src/lib.rs b/rust-src/bch_bindgen/src/lib.rs
index 86592c6b..73aeef64 100644
--- a/rust-src/bch_bindgen/src/lib.rs
+++ b/rust-src/bch_bindgen/src/lib.rs
@@ -3,7 +3,6 @@ pub mod btree;
pub mod bkey;
pub mod errcode;
pub mod keyutils;
-pub mod log;
pub mod rs;
pub mod fs;
pub mod opts;
diff --git a/rust-src/bch_bindgen/src/log.rs b/rust-src/bch_bindgen/src/log.rs
deleted file mode 100644
index 32927f16..00000000
--- a/rust-src/bch_bindgen/src/log.rs
+++ /dev/null
@@ -1,57 +0,0 @@
-use std::sync::atomic::{AtomicU8, Ordering};
-
-pub const MUTE: u8 = 0;
-pub const ERROR: u8 = 1;
-pub const INFO: u8 = 2;
-pub const DEBUG: u8 = 3;
-
-// error level by default
-pub static VERBOSE: AtomicU8 = AtomicU8::new(ERROR);
-
-#[inline]
-pub fn set_verbose_level(level: u8) {
- VERBOSE.store(level, Ordering::SeqCst);
-}
-
-pub fn max_level() -> u8 {
- VERBOSE.load(Ordering::SeqCst)
-}
-
-#[macro_export]
-macro_rules! info {
- ($($arg:tt)*) => {
- if 2 <= $crate::log::max_level() {
- println!("{} {} {}",
- " INFO".green(),
- format!("{}:", module_path!()).bright_black(),
- format_args!($($arg)*)
- );
- }
- }
-}
-
-#[macro_export]
-macro_rules! debug {
- ($($arg:tt)*) => {
- if 3 <= $crate::log::max_level() {
- println!("{} {} {}",
- "DEBUG".bright_blue(),
- format!("{}:", module_path!()).bright_black(),
- format_args!($($arg)*)
- );
- }
- }
-}
-
-#[macro_export]
-macro_rules! error {
- ($($arg:tt)*) => {
- if 1 <= $crate::log::max_level() {
- println!("{} {} {}",
- "ERROR".bright_red(),
- format!("{}:", module_path!()).bright_black(),
- format_args!($($arg)*)
- );
- }
- }
-}
diff --git a/rust-src/src/cmd_list.rs b/rust-src/src/cmd_list.rs
index f04efa2c..2dc8d719 100644
--- a/rust-src/src/cmd_list.rs
+++ b/rust-src/src/cmd_list.rs
@@ -1,5 +1,5 @@
use atty::Stream;
-use bch_bindgen::error;
+use log::{error};
use bch_bindgen::bcachefs;
use bch_bindgen::opt_set;
use bch_bindgen::fs::Fs;
@@ -9,7 +9,6 @@ use bch_bindgen::btree::BtreeIter;
use bch_bindgen::btree::BtreeNodeIter;
use bch_bindgen::btree::BtreeIterFlags;
use clap::Parser;
-use colored::Colorize;
use std::ffi::{CStr, OsStr, c_int, c_char};
use std::os::unix::ffi::OsStrExt;
diff --git a/rust-src/src/cmd_mount.rs b/rust-src/src/cmd_mount.rs
index 1251d0d7..af370ef6 100644
--- a/rust-src/src/cmd_mount.rs
+++ b/rust-src/src/cmd_mount.rs
@@ -1,11 +1,13 @@
use atty::Stream;
-use bch_bindgen::{bcachefs, bcachefs::bch_sb_handle, debug, error, info};
+use bch_bindgen::{bcachefs, bcachefs::bch_sb_handle};
+use log::{info, warn, debug, error, trace, LevelFilter};
use clap::Parser;
-use colored::Colorize;
use uuid::Uuid;
+use std::convert::TryInto;
use std::path::PathBuf;
use crate::key;
use crate::key::KeyLoc;
+use crate::logger::SimpleLogger;
use std::ffi::{CStr, CString, OsStr, c_int, c_char, c_void};
use std::os::unix::ffi::OsStrExt;
@@ -202,9 +204,20 @@ pub extern "C" fn cmd_mount(argc: c_int, argv: *const *const c_char) {
.collect();
let opt = Cli::parse_from(argv);
- bch_bindgen::log::set_verbose_level(opt.verbose + bch_bindgen::log::ERROR);
+
+ log::set_boxed_logger(Box::new(SimpleLogger)).unwrap();
+
+ // @TODO : more granular log levels via mount option
+ log::set_max_level(match opt.verbose {
+ 0 => LevelFilter::Warn,
+ 1 => LevelFilter::Trace,
+ 2_u8..=u8::MAX => todo!(),
+ });
+
colored::control::set_override(opt.colorize);
if let Err(e) = cmd_mount_inner(opt) {
error!("Fatal error: {}", e);
+ } else {
+ info!("Successfully mounted");
}
}
diff --git a/rust-src/src/key.rs b/rust-src/src/key.rs
index abea5844..2af34b13 100644
--- a/rust-src/src/key.rs
+++ b/rust-src/src/key.rs
@@ -1,6 +1,5 @@
-use bch_bindgen::info;
+use log::{info};
use bch_bindgen::bcachefs::bch_sb_handle;
-use colored::Colorize;
use crate::c_str;
use anyhow::anyhow;
diff --git a/rust-src/src/lib.rs b/rust-src/src/lib.rs
index a33e3914..159d049d 100644
--- a/rust-src/src/lib.rs
+++ b/rust-src/src/lib.rs
@@ -1,4 +1,5 @@
pub mod key;
+pub mod logger;
pub mod cmd_mount;
pub mod cmd_list;
diff --git a/rust-src/src/logger.rs b/rust-src/src/logger.rs
new file mode 100644
index 00000000..2cd7b363
--- /dev/null
+++ b/rust-src/src/logger.rs
@@ -0,0 +1,28 @@
+use colored::Colorize;
+use log::{Level, Metadata, Record};
+
+pub struct SimpleLogger;
+
+impl log::Log for SimpleLogger {
+ fn enabled(&self, _: &Metadata) -> bool {
+ true
+ }
+
+ fn log(&self, record: &Record) {
+ let debug_prefix = match record.level() {
+ Level::Error => "ERROR".bright_red(),
+ Level::Warn => "WARN".bright_yellow(),
+ Level::Info => "INFO".green(),
+ Level::Debug => "DEBUG".bright_blue(),
+ Level::Trace => "TRACE".into(),
+ };
+ println!(
+ "{} - {}: {}",
+ debug_prefix,
+ record.module_path().unwrap_or_default().bright_black(),
+ record.args()
+ );
+ }
+
+ fn flush(&self) {}
+}