Skip to content

Commit

Permalink
Merge pull request #77 from datachainlab/log-level
Browse files Browse the repository at this point in the history
Add cli option `log_level`

Signed-off-by: Jun Kimura <jun.kimura@datachain.jp>
  • Loading branch information
bluele authored Jul 12, 2023
2 parents 43dbb0c + f040817 commit 170ed46
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 6 deletions.
10 changes: 10 additions & 0 deletions app/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ pub enum CliCmd {

impl CliCmd {
pub fn run(self, opts: &Opts) -> Result<()> {
Self::setup_logger(opts)?;
match self {
CliCmd::Enclave(cmd) => {
Self::setup_read_only_env(opts);
Expand All @@ -47,6 +48,15 @@ impl CliCmd {
}
}

fn setup_logger(opts: &Opts) -> Result<()> {
if let Some(level_filter) = opts.get_log_level_filter()? {
env_logger::builder().filter_level(level_filter).init();
} else {
env_logger::init_from_env(env_logger::Env::default().default_filter_or("info"));
}
Ok(())
}

fn setup_env(opts: &Opts) {
let store = HostStore::RocksDB(RocksDBStore::open(opts.get_state_store_path()));
let env = Environment::new(opts.get_home(), Arc::new(RwLock::new(store)));
Expand Down
3 changes: 0 additions & 3 deletions app/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,5 @@ mod enclave;
mod opts;

fn main() -> Result<()> {
env_logger::init_from_env(
env_logger::Env::default().filter_or(env_logger::DEFAULT_FILTER_ENV, "info"),
);
Cli::parse().run()
}
20 changes: 19 additions & 1 deletion app/src/opts.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
use anyhow::{anyhow, Result};
use clap::Parser;
use std::path::PathBuf;
use log::LevelFilter;
use std::{path::PathBuf, str::FromStr};

#[derive(Debug, Parser)]
pub struct Opts {
/// Path to the home directory
#[clap(long = "home", help = "Path to LCP home directory")]
pub home: Option<PathBuf>,
/// Verbosity level of the logger
/// priority for setting log level:
/// 1. command line option
/// 2. environment variable
#[clap(long = "log_level", help = "Verbosity level of the logger")]
pub log_level: Option<String>,
}

impl Opts {
Expand All @@ -24,4 +32,14 @@ impl Opts {
pub fn get_state_store_path(&self) -> PathBuf {
self.get_home().join("state")
}

pub fn get_log_level_filter(&self) -> Result<Option<LevelFilter>> {
if let Some(log_level) = self.log_level.as_ref() {
Ok(Some(LevelFilter::from_str(log_level).map_err(|_| {
anyhow!("Log level '{}' is not supported. The following levels are available: [OFF, ERROR, WARN, INFO, DEBUG, TRACE]", log_level)
})?))
} else {
Ok(None)
}
}
}
4 changes: 2 additions & 2 deletions modules/store/src/rocksdb.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ impl RocksDBStore {

pub fn open_read_only<P: AsRef<Path>>(path: P) -> Self {
if !path.as_ref().exists() {
info!("initialize a database: {:?}", path.as_ref());
let _store = Self::open(path.as_ref());
let store = Self::open(path.as_ref());
drop(store);
}
let db = DB::open_for_read_only(&Default::default(), path, false).unwrap();
RocksDBStoreBuilder {
Expand Down

0 comments on commit 170ed46

Please sign in to comment.