Merge pull request #21 from fluencelabs/set_max_level

This commit is contained in:
vms 2021-02-26 12:30:25 +03:00 committed by GitHub
commit 152aef12c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 43 additions and 24 deletions

View File

@ -1,6 +1,6 @@
[package] [package]
name = "fluence" name = "fluence"
version = "0.3.3" # remember to update html_root_url version = "0.4.0" # remember to update html_root_url
description = "Fluence backend SDK for developing backend applications for the Fluence network" description = "Fluence backend SDK for developing backend applications for the Fluence network"
documentation = "https://docs.rs/fluence/" documentation = "https://docs.rs/fluence/"
repository = "https://github.com/fluencelabs/rust-sdk" repository = "https://github.com/fluencelabs/rust-sdk"
@ -18,8 +18,8 @@ all-features = true
path = "src/lib.rs" path = "src/lib.rs"
[dependencies] [dependencies]
fluence-sdk-macro = { path = "crates/macro", version = "=0.3.3" } fluence-sdk-macro = { path = "crates/macro", version = "=0.4.0" }
fluence-sdk-main = { path = "crates/main", version = "=0.3.3" } fluence-sdk-main = { path = "crates/main", version = "=0.4.0" }
[features] [features]
# Print some internal logs by log_utf8_string # Print some internal logs by log_utf8_string

View File

@ -1,6 +1,6 @@
[package] [package]
name = "fluence-sdk-macro" name = "fluence-sdk-macro"
version = "0.3.3" # remember to update html_root_url version = "0.4.0" # remember to update html_root_url
edition = "2018" edition = "2018"
description = "Definition of `#[invoke_handler]` attribute" description = "Definition of `#[invoke_handler]` attribute"
documentation = "https://docs.rs/fluence/fluence-sdk-macro" documentation = "https://docs.rs/fluence/fluence-sdk-macro"
@ -17,4 +17,4 @@ all-features = true
proc-macro = true proc-macro = true
[dependencies] [dependencies]
fluence-sdk-wit = { path = "../wit", version = "=0.3.3" } fluence-sdk-wit = { path = "../wit", version = "=0.4.0" }

View File

@ -1,6 +1,6 @@
[package] [package]
name = "fluence-sdk-main" name = "fluence-sdk-main"
version = "0.3.3" # remember to update html_root_url version = "0.4.0" # remember to update html_root_url
edition = "2018" edition = "2018"
description = "Rust SDK for applications for the Fluence network" description = "Rust SDK for applications for the Fluence network"
documentation = "https://docs.rs/fluence/fluence-sdk-macro" documentation = "https://docs.rs/fluence/fluence-sdk-macro"
@ -18,7 +18,7 @@ path = "src/lib.rs"
crate-type = ["rlib"] crate-type = ["rlib"]
[dependencies] [dependencies]
fluence-sdk-macro = { path = "../macro", version = "=0.3.3" } fluence-sdk-macro = { path = "../macro", version = "=0.4.0" }
log = { version = "0.4.8", features = ["std"] } log = { version = "0.4.8", features = ["std"] }
serde = "=1.0.118" serde = "=1.0.118"

View File

@ -23,12 +23,12 @@
//! Macros from crate [`log`] are used as a logging facade. //! Macros from crate [`log`] are used as a logging facade.
//! //!
//! ``` //! ```
//! use fluence::sdk::*; //! use fluence::logger;
//! use log::{error, trace}; //! use log::{error, trace};
//! use simple_logger; //! use simple_logger;
//! //!
//! fn main() { //! fn main() {
//! logger::WasmLogger::new() //! logger::WasmLoggerBuilder::new()
//! .with_log_leve(log::Level::Info) //! .with_log_leve(log::Level::Info)
//! .build() //! .build()
//! .unwrap(); //! .unwrap();
@ -42,14 +42,14 @@
//! [`WasmLogger`]: struct.WasmLogger.html //! [`WasmLogger`]: struct.WasmLogger.html
//! [`log`]: https://docs.rs/log //! [`log`]: https://docs.rs/log
use log::Level as LogLevel; use log::LevelFilter;
use std::collections::HashMap; use std::collections::HashMap;
/// By default, logger will be initialized with log level from this environment variable. /// By default, logger will be initialized with log level from this environment variable.
pub const WASM_LOG_ENV_NAME: &str = "WASM_LOG"; pub const WASM_LOG_ENV_NAME: &str = "WASM_LOG";
/// If WASM_LOG_ENV isn't set, then this level will be used as the default. /// If WASM_LOG_ENV isn't set, then this level will be used as the default.
const WASM_DEFAULT_LOG_LEVEL: LogLevel = LogLevel::Info; const WASM_DEFAULT_LOG_LEVEL: LevelFilter = LevelFilter::Info;
/// Mapping from logging namespace string to its bitmask. /// Mapping from logging namespace string to its bitmask.
/// TODO: use i64 for bitmask when wasmpack/bindgen issue with i64 is fixed. /// TODO: use i64 for bitmask when wasmpack/bindgen issue with i64 is fixed.
@ -58,7 +58,7 @@ const WASM_DEFAULT_LOG_LEVEL: LogLevel = LogLevel::Info;
pub type TargetMap = HashMap<&'static str, i32>; pub type TargetMap = HashMap<&'static str, i32>;
/// Mapping from module name to their log levels. /// Mapping from module name to their log levels.
type ModuleMap = HashMap<String, log::Level>; type ModuleMap = HashMap<String, LevelFilter>;
/// The Wasm Logger. /// The Wasm Logger.
/// ///
@ -73,7 +73,7 @@ type ModuleMap = HashMap<String, log::Level>;
struct WasmLogger { struct WasmLogger {
target_map: TargetMap, target_map: TargetMap,
modules_level: ModuleMap, modules_level: ModuleMap,
default_log_level: log::Level, default_log_level: LevelFilter,
} }
/// The Wasm logger builder. /// The Wasm logger builder.
@ -92,7 +92,7 @@ impl WasmLoggerBuilder {
let default_log_level = std::env::var(WASM_LOG_ENV_NAME) let default_log_level = std::env::var(WASM_LOG_ENV_NAME)
.map_or(WASM_DEFAULT_LOG_LEVEL, |log_level_str| { .map_or(WASM_DEFAULT_LOG_LEVEL, |log_level_str| {
LogLevel::from_str(&log_level_str).unwrap_or(WASM_DEFAULT_LOG_LEVEL) LevelFilter::from_str(&log_level_str).unwrap_or(WASM_DEFAULT_LOG_LEVEL)
}); });
let wasm_logger = WasmLogger { let wasm_logger = WasmLogger {
@ -105,7 +105,7 @@ impl WasmLoggerBuilder {
} }
/// Set the log level. /// Set the log level.
pub fn with_log_level(mut self, level: log::Level) -> Self { pub fn with_log_level(mut self, level: LevelFilter) -> Self {
self.wasm_logger.default_log_level = level; self.wasm_logger.default_log_level = level;
self self
} }
@ -117,7 +117,7 @@ impl WasmLoggerBuilder {
self self
} }
pub fn filter(mut self, module_name: impl Into<String>, level: log::Level) -> Self { pub fn filter(mut self, module_name: impl Into<String>, level: LevelFilter) -> Self {
self.wasm_logger self.wasm_logger
.modules_level .modules_level
.insert(module_name.into(), level); .insert(module_name.into(), level);
@ -134,24 +134,42 @@ impl WasmLoggerBuilder {
/// # use log::info; /// # use log::info;
/// # /// #
/// # fn main() { /// # fn main() {
/// logger::WasmLogger::new() /// logger::WasmLoggerBuilder::new()
/// .with_log_level(log::Level::Trace) /// .with_log_level(log::LevelFilter::Trace)
/// .with_target_map(<_>::default()) /// .with_target_map(<_>::default())
/// .build() /// .build()
/// .unwrap(); /// .unwrap();
/// # } /// # }
/// ``` /// ```
pub fn build(self) -> Result<(), log::SetLoggerError> { pub fn build(self) -> Result<(), log::SetLoggerError> {
let max_level = self.max_log_level();
let Self { wasm_logger } = self; let Self { wasm_logger } = self;
log::set_boxed_logger(Box::new(wasm_logger))?; log::set_boxed_logger(Box::new(wasm_logger))?;
log::set_max_level(max_level);
Ok(()) Ok(())
} }
fn max_log_level(&self) -> log::LevelFilter {
let default_level = self.wasm_logger.default_log_level;
let max_filter_level = self
.wasm_logger
.modules_level
.iter()
.map(|(_, &level)| level)
.max()
.unwrap_or(LevelFilter::Off);
std::cmp::max(default_level, max_filter_level)
}
} }
impl log::Log for WasmLogger { impl log::Log for WasmLogger {
#[inline] #[inline]
fn enabled(&self, metadata: &log::Metadata<'_>) -> bool { fn enabled(&self, metadata: &log::Metadata<'_>) -> bool {
println!("enabled is called with {:?}", metadata);
let allowed_level = match self.modules_level.get(metadata.target()) { let allowed_level = match self.modules_level.get(metadata.target()) {
Some(allowed_level) => allowed_level, Some(allowed_level) => allowed_level,
None => &self.default_log_level, None => &self.default_log_level,
@ -222,6 +240,7 @@ fn level_from_i32(level: i32) -> log::Level {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::WasmLogger; use super::WasmLogger;
use log::LevelFilter;
use log::Log; use log::Log;
use std::collections::HashMap; use std::collections::HashMap;
@ -239,14 +258,14 @@ mod tests {
let module_2_name = "module_2"; let module_2_name = "module_2";
let modules_level = maplit::hashmap!( let modules_level = maplit::hashmap!(
module_1_name.to_string() => log::Level::Info, module_1_name.to_string() => LevelFilter::Info,
module_2_name.to_string() => log::Level::Warn, module_2_name.to_string() => LevelFilter::Warn,
); );
let logger = WasmLogger { let logger = WasmLogger {
target_map: HashMap::new(), target_map: HashMap::new(),
modules_level, modules_level,
default_log_level: log::Level::Error, default_log_level: LevelFilter::Error,
}; };
let allowed_metadata = create_metadata(module_1_name, log::Level::Info); let allowed_metadata = create_metadata(module_1_name, log::Level::Info);
@ -268,13 +287,13 @@ mod tests {
#[test] #[test]
fn default_log_level() { fn default_log_level() {
let modules_level = maplit::hashmap!( let modules_level = maplit::hashmap!(
"module_1".to_string() => log::Level::Info, "module_1".to_string() => LevelFilter::Info,
); );
let logger = WasmLogger { let logger = WasmLogger {
target_map: HashMap::new(), target_map: HashMap::new(),
modules_level, modules_level,
default_log_level: log::Level::Warn, default_log_level: LevelFilter::Warn,
}; };
let module_name = "some_module"; let module_name = "some_module";

View File

@ -1,6 +1,6 @@
[package] [package]
name = "fluence-sdk-wit" name = "fluence-sdk-wit"
version = "0.3.3" # remember to update html_root_url version = "0.4.0" # remember to update html_root_url
edition = "2018" edition = "2018"
description = "Webassembly interface-types generator" description = "Webassembly interface-types generator"
documentation = "https://docs.rs/fluence/fluence-sdk-macro" documentation = "https://docs.rs/fluence/fluence-sdk-macro"