diff --git a/Cargo.lock b/Cargo.lock index f607af8403b00e103b2e3f4aa437cdf6152f9bca..7f3a632100990ba39deedb104557526512bcfd47 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -60,7 +60,7 @@ dependencies = [ "bitflags", "constants", "libc", - "log", + "log 0.1.0", "nix 0.24.3", "pathdiff", "pkg-config", @@ -68,7 +68,6 @@ dependencies = [ "rand", "snafu", "tempfile", - "time", ] [[package]] @@ -91,7 +90,7 @@ dependencies = [ "clang-sys", "lazy_static", "lazycell", - "log", + "log 0.4.14", "peeking_take_while", "proc-macro2", "quote", @@ -160,7 +159,7 @@ version = "0.5.0" dependencies = [ "basic", "bitflags", - "log", + "log 0.1.0", "nix 0.24.3", "snafu", "walkdir", @@ -301,7 +300,7 @@ dependencies = [ "event", "heed", "libc", - "log", + "log 0.1.0", "nix 0.24.3", "serde", "snafu", @@ -345,7 +344,7 @@ dependencies = [ "event", "fnmatch-regex", "libc", - "log", + "log 0.1.0", "loopdev", "nix 0.24.3", "regex", @@ -373,7 +372,7 @@ dependencies = [ "kmod_rs", "lazy_static", "libc", - "log", + "log 0.1.0", "nix 0.24.3", "regex", "rtnetlink", @@ -529,7 +528,7 @@ name = "fstab" version = "0.5.0" dependencies = [ "inotify", - "log", + "log 0.1.0", "nix 0.24.3", ] @@ -630,7 +629,7 @@ checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", ] [[package]] @@ -720,7 +719,7 @@ name = "hostname_setup" version = "0.5.0" dependencies = [ "basic", - "log", + "log 0.1.0", "nix 0.24.3", ] @@ -846,7 +845,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0dd79b6ea06a97c93bc5587fba4c2ed6d723b939d35d5e3fb3c6870d12e6d17" dependencies = [ "libc", - "log", + "log 0.4.14", ] [[package]] @@ -864,7 +863,7 @@ version = "0.5.0" dependencies = [ "basic", "kmod-sys", - "log", + "log 0.1.0", "nix 0.24.3", ] @@ -937,6 +936,15 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "log" +version = "0.1.0" +dependencies = [ + "constants", + "libc", + "log 0.4.14", +] + [[package]] name = "log" version = "0.4.14" @@ -1002,8 +1010,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", + "log 0.4.14", + "wasi", "windows-sys 0.48.0", ] @@ -1016,7 +1024,7 @@ dependencies = [ "epoll", "event", "libc", - "log", + "log 0.1.0", "macros", "nix 0.24.3", "once_cell", @@ -1075,7 +1083,7 @@ checksum = "ddd06e90449ae973fe3888c1ff85949604ef5189b4ac9a2ae39518da1e00762d" dependencies = [ "bytes", "futures", - "log", + "log 0.4.14", "netlink-packet-core", "netlink-sys", "tokio", @@ -1090,7 +1098,7 @@ checksum = "f48ea34ea0678719815c3753155067212f853ad2d8ef4a49167bae7f7c254188" dependencies = [ "futures", "libc", - "log", + "log 0.4.14", "tokio", ] @@ -1322,7 +1330,7 @@ dependencies = [ "heck 0.3.3", "itertools", "lazy_static", - "log", + "log 0.4.14", "multimap", "petgraph", "prost", @@ -1406,7 +1414,7 @@ version = "0.5.0" dependencies = [ "basic", "libc", - "log", + "log 0.1.0", "nix 0.24.3", "xattr", ] @@ -1416,7 +1424,7 @@ name = "rc-local-generator" version = "0.5.0" dependencies = [ "libc", - "log", + "log 0.1.0", ] [[package]] @@ -1461,7 +1469,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c9a6200d18ec1acfc218ce71363dcc9b6075f399220f903fdfeacd476a876ef" dependencies = [ "futures", - "log", + "log 0.4.14", "netlink-packet-route", "netlink-proto", "nix 0.22.3", @@ -1563,7 +1571,7 @@ dependencies = [ "event", "libc", "libtests", - "log", + "log 0.1.0", "macros", "nix 0.24.3", "once_cell", @@ -1629,7 +1637,7 @@ dependencies = [ "core", "event", "libtests", - "log", + "log 0.1.0", "macros", "nix 0.24.3", "once_cell", @@ -1684,7 +1692,7 @@ name = "switch_root" version = "0.5.0" dependencies = [ "basic", - "log", + "log 0.1.0", "nix 0.24.3", ] @@ -1736,7 +1744,7 @@ name = "sysMaster" version = "0.5.0" dependencies = [ "kernlog", - "log", + "log 0.4.14", "mio", "nix 0.24.3", ] @@ -1759,7 +1767,7 @@ dependencies = [ "lazy_static", "libc", "libtests", - "log", + "log 0.1.0", "mount", "nix 0.24.3", "once_cell", @@ -1790,7 +1798,7 @@ version = "0.5.0" dependencies = [ "basic", "core", - "log", + "log 0.1.0", "macros", "nix 0.24.3", "once_cell", @@ -1837,17 +1845,6 @@ dependencies = [ "syn 2.0.28", ] -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - [[package]] name = "tinyvec" version = "1.6.0" @@ -1889,7 +1886,7 @@ dependencies = [ "bytes", "futures-core", "futures-sink", - "log", + "log 0.4.14", "pin-project-lite", "tokio", ] @@ -1978,12 +1975,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" diff --git a/Cargo.toml b/Cargo.toml index 02ca57f4122b60d62a54970e3d339a31d958f7a1..9ed91a91b9c361ee1b77e5e2172cf38407821cce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -128,6 +128,7 @@ members = [ "libs/cgroup", "libs/event", "libs/basic", + "libs/log", "libs/libtests", "libs/watchdog", "libs/device", diff --git a/core/coms/mount/Cargo.toml b/core/coms/mount/Cargo.toml index 6f92dceb2ddde7f469b7dcc3d1893d1fa851f1a7..2ce78ae890a9e5176612a135c29b81491569cf6b 100755 --- a/core/coms/mount/Cargo.toml +++ b/core/coms/mount/Cargo.toml @@ -13,11 +13,11 @@ name = "mount" basic = { path = "../../../libs/basic", default-features = false } core = { path = "../../libcore", default-features = false } event = { path = "../../../libs/event" } +log = { path = "../../../libs/log" } macros = { path = "../../../libs/macros" } epoll = "=4.3.1" libc = { version = "0.2.*", default-features = false } -log = { version = "=0.4.14", default_features = false } nix = { version = "0.24", default-features = false } once_cell = { version = "=1.7.2", default-features = false } serde = { version = "1.0.130", default-features = false } diff --git a/core/coms/service/Cargo.toml b/core/coms/service/Cargo.toml index 8e6c711e4734de48a3f7b7d353a174603edad94b..2784d80e5de7a1d471a5fae9d9b7dca0ed360227 100755 --- a/core/coms/service/Cargo.toml +++ b/core/coms/service/Cargo.toml @@ -15,11 +15,11 @@ cgroup = { path = "../../../libs/cgroup", default-features = false } constants = { path = "../../../libs/constants" } core = { path = "../../libcore", default-features = false } event = { path = "../../../libs/event" } +log = { path = "../../../libs/log" } macros = { path = "../../../libs/macros" } confique = { version = "0.1.3", default-features = false } libc = { version = "0.2.*", default-features = false } -log = { version = "=0.4.14", default_features = false } nix = { version = "0.24", default-features = false } once_cell = { version = "=1.7.2", default-features = false } serde = { version = "1.0.130", default-features = false } diff --git a/core/coms/socket/Cargo.toml b/core/coms/socket/Cargo.toml index 11e1200cb08ba72f501e65696904edf07177bd73..f4156469fa3b7793b8ed0b4a9143ed3f1426a025 100755 --- a/core/coms/socket/Cargo.toml +++ b/core/coms/socket/Cargo.toml @@ -14,10 +14,10 @@ basic = { path = "../../../libs/basic", features = ["io"] } constants = { path = "../../../libs/constants" } core = { path = "../../libcore", default-features = false } event = { path = "../../../libs/event" } +log = { path = "../../../libs/log" } macros = { path = "../../../libs/macros" } confique = { version = "0.1.3", default-features = false, features = ["toml"] } -log = { version = "=0.4.14", default_features = false } nix = { version = "0.24", default-features = false } once_cell = { version = "=1.7.2", default-features = false } serde = { version = "1.0.130", default-features = false } diff --git a/core/coms/target/Cargo.toml b/core/coms/target/Cargo.toml index 0a0dc33b505c5cb301bd9f6233d64b4978d46024..65f27399230510342d08090f160972c7096ecd1e 100755 --- a/core/coms/target/Cargo.toml +++ b/core/coms/target/Cargo.toml @@ -12,9 +12,9 @@ name = "target" [dependencies] basic = { path = "../../../libs/basic" } core = { path = "../../libcore", default-features = false } +log = { path = "../../../libs/log" } macros = { path = "../../../libs/macros" } -log = { version = "=0.4.14", default_features = false } nix = { version = "0.24", default-features = false } once_cell = { version = "=1.7.2", default-features = false } serde = { version = "1.0.130", default-features = false } diff --git a/core/libcore/Cargo.toml b/core/libcore/Cargo.toml index fc445c5de78e92bccbdf7269ea65c2f5a278d625..968c5c1d8f8d9dd39bcc69526c7bf45632bbcce9 100755 --- a/core/libcore/Cargo.toml +++ b/core/libcore/Cargo.toml @@ -10,13 +10,13 @@ edition = "2021" basic = { path = "../../libs/basic", features = ["rlimit", "show_table"] } cgroup = { path = "../../libs/cgroup" } event = { path = "../../libs/event" } +log = { path = "../../libs/log" } # third libraries bitflags = "1.3.2" confique = { version = "0.1.3", default-features = false } heed = { version = "0.10.6", features = ["lmdb"], default-features = false } libc = { version = "0.2.*", default-features = false } -log = { version = "=0.4.14", default_features = false } nix = { version = "0.24", default-features = false } # regex = { version = "1.6.0", default-features = false } serde = { version = "1.0.130", default-features = false } diff --git a/core/libcore/src/unit/base.rs b/core/libcore/src/unit/base.rs index b6b1d996bdafa2b852eb8d94b7ef4fcf76093310..094004aabc227e6d444735a42a5ecdfb12501441 100755 --- a/core/libcore/src/unit/base.rs +++ b/core/libcore/src/unit/base.rs @@ -174,7 +174,7 @@ pub trait SubUnit: ReStation + UnitMngUtil { #[macro_export] macro_rules! declare_unitobj_plugin_with_param { ($unit_type:ty, $constructor:path) => { - use log::LevelFilter; + use log::Level; /// method for create the unit instance #[cfg_attr(not(feature = "noplugin"), no_mangle)] pub fn __subunit_create_with_params( diff --git a/core/libcore/src/unit/umif.rs b/core/libcore/src/unit/umif.rs index 5abf78c51409c2409ae0b76f6d68fa5fe0ce7fb8..24b6862e867171c4857c0b51a36c07df0ab002de 100755 --- a/core/libcore/src/unit/umif.rs +++ b/core/libcore/src/unit/umif.rs @@ -224,17 +224,17 @@ pub trait UnitManagerObj: UnitMngUtil + ReStation { #[macro_export] macro_rules! declare_umobj_plugin { ($unit_type:ty, $constructor:path, $name:expr) => { - use log::LevelFilter; + use log::Level; /// method for create the sub-unit-manager instance #[cfg_attr(not(feature = "noplugin"), no_mangle)] pub fn __um_obj_create( - level: LevelFilter, + level: Level, target: &str, file_size: u32, file_number: u32, ) -> *mut dyn $crate::unit::UnitManagerObj { #[cfg(feature = "plugin")] - logger::init_log_for_subum($name, level, target, file_size, file_number); + log::logger::init_log_for_subum($name, level, target, file_size, file_number); let construcotr: fn() -> $unit_type = $constructor; let obj = construcotr(); let boxed: Box = Box::new(obj); diff --git a/core/sysmaster/Cargo.toml b/core/sysmaster/Cargo.toml index bc7ef0f7fa1c21d2787b021cfc1c076c86a91ffb..db3aad803b136c60695de14b4b04f813c5a4c10e 100755 --- a/core/sysmaster/Cargo.toml +++ b/core/sysmaster/Cargo.toml @@ -20,6 +20,10 @@ features = [] optional = false default-features = false +[dependencies.log] +path = "../../libs/log" +optional = false + [dependencies.clap] version = "3.1.8" features = ["derive", "std"] @@ -64,11 +68,6 @@ features = [] optional = false default-features = false -[dependencies.log] -version = "=0.4.14" -features = [] -optional = false - [dependencies.mount] path = "../coms/mount" features = [] diff --git a/core/sysmaster/src/job/junit.rs b/core/sysmaster/src/job/junit.rs index f61cccd6e5dfb0809446902e87677efe47c1141a..5424a6600b0c741bdc6b3d0d1ac9d48ae7941be8 100755 --- a/core/sysmaster/src/job/junit.rs +++ b/core/sysmaster/src/job/junit.rs @@ -815,9 +815,9 @@ mod tests { use crate::unit::DataManager; use crate::unit::UnitX; use crate::unit::{JobMode, UnitRe}; - use basic::logger; use core::rel::{ReliConf, Reliability}; use event::Events; + use log::logger; #[test] fn juv_api_len() { @@ -1352,7 +1352,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("test_unit_load", log::LevelFilter::Trace); + logger::init_log_to_console("test_unit_load", log::Level::Trace); log::info!("test"); test_utils::create_unit_for_test_pub(dmr, relir, rentryr, name) diff --git a/core/sysmaster/src/job/manager.rs b/core/sysmaster/src/job/manager.rs index 7c4c5e2a441627b58cbfa10b7304d00925383f76..520ac7989f5cd0441e83c335757dfa4e342a2083 100755 --- a/core/sysmaster/src/job/manager.rs +++ b/core/sysmaster/src/job/manager.rs @@ -814,14 +814,14 @@ mod tests { use crate::unit::test_utils; use crate::unit::DataManager; use crate::unit::UnitRe; - use basic::logger; use core::rel::ReliConf; use core::unit::UnitRelations; + use log::logger; //#[test] #[allow(dead_code)] fn job_reli() { - logger::init_log_to_console("test_unit_load", log::LevelFilter::Trace); + logger::init_log_to_console("test_unit_load", log::Level::Trace); let reli = Rc::new(Reliability::new( ReliConf::new().set_max_dbs(RELI_HISTORY_MAX_DBS), )); @@ -1179,7 +1179,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("test_unit_load", log::LevelFilter::Trace); + logger::init_log_to_console("test_unit_load", log::Level::Trace); log::info!("test"); let unit = test_utils::create_unit_for_test_pub(dmr, relir, rentryr, name); diff --git a/core/sysmaster/src/job/notify.rs b/core/sysmaster/src/job/notify.rs index 8bf09288931928a09393a42129226d82ccf2427c..fb0cecf6223ddf754c1fadf6d368942f97eb0cb4 100755 --- a/core/sysmaster/src/job/notify.rs +++ b/core/sysmaster/src/job/notify.rs @@ -146,8 +146,8 @@ mod tests { use crate::unit::UnitRe; use crate::unit::UnitX; - use basic::logger; use core::rel::{ReliConf, Reliability}; + use log::logger; #[test] fn jn_api() { @@ -195,7 +195,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("test_unit_load", log::LevelFilter::Trace); + logger::init_log_to_console("test_unit_load", log::Level::Trace); log::info!("test"); test_utils::create_unit_for_test_pub(dmr, relir, rentryr, name) } diff --git a/core/sysmaster/src/job/stat.rs b/core/sysmaster/src/job/stat.rs index ff65982be5d3d6036629af26b126db9216c731fb..7ba8058b3de809679a39c11f22e53ad7086abb0d 100755 --- a/core/sysmaster/src/job/stat.rs +++ b/core/sysmaster/src/job/stat.rs @@ -448,9 +448,9 @@ mod tests { use crate::unit::UnitDb; use crate::unit::UnitRe; use crate::unit::UnitX; - use basic::logger; use core::rel::{ReliConf, Reliability}; use event::Events; + use log::logger; #[test] fn js_api() { @@ -503,7 +503,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("test_unit_load", log::LevelFilter::Trace); + logger::init_log_to_console("test_unit_load", log::Level::Trace); log::info!("test"); test_utils::create_unit_for_test_pub(dmr, relir, rentryr, name) } diff --git a/core/sysmaster/src/job/table.rs b/core/sysmaster/src/job/table.rs index 72bae9c7abb811c68cdb9b2a9bac93e0931124e4..ec0631c02344d7e7dcecf876db13e9bc2a677e41 100755 --- a/core/sysmaster/src/job/table.rs +++ b/core/sysmaster/src/job/table.rs @@ -1021,9 +1021,9 @@ mod tests { use crate::unit::test_utils; use crate::unit::DataManager; use crate::unit::UnitRe; - use basic::logger; use core::rel::{ReliConf, Reliability}; use event::Events; + use log::logger; #[test] fn job_table_record_suspend() { @@ -1055,7 +1055,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("test_unit_load", log::LevelFilter::Trace); + logger::init_log_to_console("test_unit_load", log::Level::Trace); log::info!("test"); test_utils::create_unit_for_test_pub(dmr, relir, rentryr, name) } diff --git a/core/sysmaster/src/job/transaction.rs b/core/sysmaster/src/job/transaction.rs index de5ffa1b2592b97704f48a11c32ee98966aeca02..83650526f39267f7e3176f8b05f8855638e2d332 100755 --- a/core/sysmaster/src/job/transaction.rs +++ b/core/sysmaster/src/job/transaction.rs @@ -418,10 +418,10 @@ mod tests { use crate::unit::test_utils; use crate::unit::DataManager; use crate::unit::UnitRe; - use basic::logger; use core::rel::{ReliConf, Reliability}; use core::unit::UnitRelations; use event::Events; + use log::logger; #[test] fn jt_api_expand_check() {} @@ -719,7 +719,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("test_unit_load", log::LevelFilter::Trace); + logger::init_log_to_console("test_unit_load", log::Level::Trace); log::info!("test"); let unit = test_utils::create_unit_for_test_pub(dmr, relir, rentryr, name); unit.load().expect("load error"); diff --git a/core/sysmaster/src/main.rs b/core/sysmaster/src/main.rs index 62d3c6733083224523c3e91550122119e35fe660..95aea65b9549aa232805af6415b0bbababd6d176 100755 --- a/core/sysmaster/src/main.rs +++ b/core/sysmaster/src/main.rs @@ -41,18 +41,18 @@ use crate::manager::config::ManagerConfig; use crate::manager::signals::EVENT_SIGNALS; use crate::manager::{Action, Manager, Mode, MANAGER_ARGS_SIZE_MAX}; use crate::mount::setup; -use basic::logger::{self}; use clap::Parser; use core::error::*; use core::rel; use libc::{c_int, getpid, getppid, prctl, PR_SET_CHILD_SUBREAPER}; -use log::{self, LevelFilter}; +use log::{self, Level}; use nix::sys::signal::{self, SaFlags, SigAction, SigHandler, SigSet, Signal}; use std::convert::TryFrom; use std::env::{self}; use std::os::unix::process::CommandExt; use std::process::{exit, Command}; use std::rc::Rc; +use std::str::FromStr; /// parse program arguments #[derive(Parser, Debug)] @@ -79,19 +79,9 @@ fn main() -> Result<()> { //--------------------------------------------------------------------------- let manager_config = Rc::new(ManagerConfig::new(None)); - logger::init_log( + log::logger::init_log( "sysmaster", - match manager_config.LogLevel.as_str() { - "debug" => LevelFilter::Debug, - "info" => LevelFilter::Info, - "trace" => LevelFilter::Trace, - "warn" => LevelFilter::Warn, - "error" => LevelFilter::Error, - _ => { - println!("unsupported log level, set log level to off"); - LevelFilter::Off - } - }, + Level::from_str(&manager_config.LogLevel).unwrap(), &manager_config.LogTarget, manager_config.LogFileSize, manager_config.LogFileNumber, diff --git a/core/sysmaster/src/manager/mod.rs b/core/sysmaster/src/manager/mod.rs index cf2dc5195e42f5b84f16b83902a039bdd95a6109..521d0074a1a0dd8fed5d17873c8b008810f398c0 100755 --- a/core/sysmaster/src/manager/mod.rs +++ b/core/sysmaster/src/manager/mod.rs @@ -577,12 +577,12 @@ impl Manager { #[cfg(test)] mod tests { use super::*; - use basic::logger; + use log::logger; //#[test] #[allow(dead_code)] fn manager_api() { - logger::init_log_to_console("test_target_unit_load", log::LevelFilter::Trace); + logger::init_log_to_console("test_target_unit_load", log::Level::Trace); // new let manager = Manager::new(Mode::System, Action::Run, Rc::new(ManagerConfig::new(None))); diff --git a/core/sysmaster/src/unit/datastore/child.rs b/core/sysmaster/src/unit/datastore/child.rs index 439d54357893eb30b3774c323f429b7ff1f6fff9..42511723768048d045d9fbf9caf2ec160c3c952d 100755 --- a/core/sysmaster/src/unit/datastore/child.rs +++ b/core/sysmaster/src/unit/datastore/child.rs @@ -166,8 +166,8 @@ mod tests { use crate::unit::data::DataManager; use crate::unit::rentry::UnitRe; use crate::unit::test::test_utils; - use basic::logger; use core::rel::{ReliConf, Reliability}; + use log::logger; #[test] #[should_panic] @@ -248,7 +248,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("test_unit_load", log::LevelFilter::Trace); + logger::init_log_to_console("test_unit_load", log::Level::Trace); log::info!("test"); test_utils::create_unit_for_test_pub(dmr, relir, rentryr, name) diff --git a/core/sysmaster/src/unit/datastore/deps.rs b/core/sysmaster/src/unit/datastore/deps.rs index b372cd3c62a5be08f300b644b5922639798cea6a..7d56a694d7792e761ae2ee6faa886c329d4d407a 100755 --- a/core/sysmaster/src/unit/datastore/deps.rs +++ b/core/sysmaster/src/unit/datastore/deps.rs @@ -391,8 +391,8 @@ mod tests { use crate::manager::rentry::RELI_HISTORY_MAX_DBS; use crate::unit::data::DataManager; use crate::unit::test::test_utils; - use basic::logger; use core::rel::{ReliConf, Reliability}; + use log::logger; #[test] fn dep_insert() { @@ -579,7 +579,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("test_unit_load", log::LevelFilter::Trace); + logger::init_log_to_console("test_unit_load", log::Level::Trace); log::info!("test"); test_utils::create_unit_for_test_pub(dmr, relir, rentryr, name) } diff --git a/core/sysmaster/src/unit/datastore/sets.rs b/core/sysmaster/src/unit/datastore/sets.rs index e361d2183f07aeef1bee543885a180c4c96a5da6..80e1315d238349022bb97f0a6fe45e9de4165227 100755 --- a/core/sysmaster/src/unit/datastore/sets.rs +++ b/core/sysmaster/src/unit/datastore/sets.rs @@ -88,8 +88,8 @@ mod tests { use crate::unit::data::DataManager; use crate::unit::rentry::UnitRe; use crate::unit::test::test_utils; - use basic::logger; use core::rel::{ReliConf, Reliability}; + use log::logger; #[test] fn sets_insert() { @@ -208,7 +208,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("test_unit_load", log::LevelFilter::Trace); + logger::init_log_to_console("test_unit_load", log::Level::Trace); log::info!("test"); test_utils::create_unit_for_test_pub(dmr, relir, rentryr, name) } diff --git a/core/sysmaster/src/unit/entry/uentry.rs b/core/sysmaster/src/unit/entry/uentry.rs index fcaee428bcc36a576eb7a144b85316b3016ea7ec..19e35cf45a9a93c58df07893f63096eca30493bd 100755 --- a/core/sysmaster/src/unit/entry/uentry.rs +++ b/core/sysmaster/src/unit/entry/uentry.rs @@ -769,9 +769,10 @@ mod tests { use crate::manager::RELI_HISTORY_MAX_DBS; use crate::unit::rentry::UnitRe; use crate::unit::test::test_utils::UmIfD; - use basic::{fs_util::LookupPaths, logger}; + use basic::fs_util::LookupPaths; use core::rel::{ReliConf, Reliability}; use core::unit::UnitType; + use log::logger; use std::rc::Rc; use crate::{ @@ -779,7 +780,7 @@ mod tests { unit::util::{self, UnitFile}, }; fn unit_init() -> Rc { - logger::init_log_to_console("test_unit_entry", log::LevelFilter::Trace); + logger::init_log_to_console("test_unit_entry", log::Level::Trace); let reli = Rc::new(Reliability::new( ReliConf::new().set_max_dbs(RELI_HISTORY_MAX_DBS), )); diff --git a/core/sysmaster/src/unit/execute/spawn.rs b/core/sysmaster/src/unit/execute/spawn.rs index b1af26282f76654ddffa84418389fa8288b6758d..8f6da7421b85054f37bb5da359f3a42bc21270ef 100755 --- a/core/sysmaster/src/unit/execute/spawn.rs +++ b/core/sysmaster/src/unit/execute/spawn.rs @@ -222,21 +222,29 @@ fn exec_child(unit: &Unit, cmdline: &ExecCommand, params: &ExecParameters, ctx: let envs_cstr = envs.iter().map(|v| v.as_c_str()).collect::>(); let mut keep_fds = params.fds(); - /* Be careful! We have closed the log fd from here, Don't log. */ + /* Be careful! We have closed the log fd from here. */ let ret = close_all_fds(&keep_fds); + + /* Reinit the logger before logging. */ + log::logger::reinit(); + if !ret { return; } if !shift_fds(&mut keep_fds) { + log::error!("Failed to shift fds"); return; } if !flags_fds(&mut keep_fds, params.get_nonblock()) { + log::error!("Failed to set fd flags"); return; } + log::debug!("Begin to execute {:?}, args: {:?}", cmd, cstr_args); if unistd::execve(&cmd, &cstr_args, &envs_cstr).is_err() { + log::error!("Failed to execute cmd: {:?}", cmd); std::process::exit(1); } } diff --git a/core/sysmaster/src/unit/manager.rs b/core/sysmaster/src/unit/manager.rs index 8b127e08be513c07376545ee713a5852e1d8ada5..41e702c2fcc1240af8d2e4349e86e6515526529d 100755 --- a/core/sysmaster/src/unit/manager.rs +++ b/core/sysmaster/src/unit/manager.rs @@ -1391,7 +1391,6 @@ mod tests { use super::*; use crate::manager::rentry::RELI_HISTORY_MAX_DBS; use crate::mount::setup; - use basic::logger; use core::rel::ReliConf; use core::unit::UnitActiveState; use event::Events; @@ -1400,7 +1399,7 @@ mod tests { use std::time::Duration; fn init_dm_for_test() -> (Rc, Rc, Rc) { - logger::init_log_to_console("manager test", log::LevelFilter::Trace); + log::logger::init_log_to_console("manager test", log::Level::Trace); let mut l_path = LookupPaths::new(); let test_units_dir = libtests::get_project_root() .unwrap() diff --git a/core/sysmaster/src/unit/runtime.rs b/core/sysmaster/src/unit/runtime.rs index a56319dab8d7fc4c974cd193601db4b811b7f15c..0cbb07d1133e97044e1ccfb0e75b535770b0c55a 100755 --- a/core/sysmaster/src/unit/runtime.rs +++ b/core/sysmaster/src/unit/runtime.rs @@ -385,8 +385,8 @@ mod tests { use crate::unit::data::DataManager; use crate::unit::rentry::UnitRe; use crate::unit::test; - use basic::logger; use core::rel::{ReliConf, Reliability}; + use log::logger; #[test] fn rt_push_load_queue() { @@ -473,7 +473,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("test_unit_load", log::LevelFilter::Trace); + logger::init_log_to_console("test_unit_load", log::Level::Trace); log::info!("test"); test::test_utils::create_unit_for_test_pub(dmr, relir, rentryr, name) } diff --git a/core/sysmaster/src/unit/util/unit_om.rs b/core/sysmaster/src/unit/util/unit_om.rs index 435afc31c356c89b3d8368a21a707214be8ba0aa..5cc9b2d34f40959c17a5da82bd71269b5d2bc087 100755 --- a/core/sysmaster/src/unit/util/unit_om.rs +++ b/core/sysmaster/src/unit/util/unit_om.rs @@ -88,7 +88,7 @@ mod noplugin { }); } }; - let boxed_raw = fun(log::max_level(), target, file_size, file_number); + let boxed_raw = fun(log::inner::max_level(), target, file_size, file_number); Ok(unsafe { Box::from_raw(boxed_raw) }) } diff --git a/exts/devmaster/Cargo.toml b/exts/devmaster/Cargo.toml index 2b9edc15014aad43ca2384c620d271d252957b35..b744eb12e66dac30e204b7ae2bf9b8ca3bcedf30 100644 --- a/exts/devmaster/Cargo.toml +++ b/exts/devmaster/Cargo.toml @@ -31,6 +31,7 @@ device = { path = "../../libs/device" } event = { path = "../../libs/event" } input_event_codes_rs = { path = "../../libs/input_event_codes_rs" } kmod_rs = { path = "../../libs/kmod_rs" } +log = { path = "../../libs/log" } # third libraries bitflags = "1.3.2" @@ -47,7 +48,6 @@ ioctl-sys = "0.7.1" ioctls = "0.6.1" lazy_static = "1.4.0" libc = { version = "0.2.*", default-features = false } -log = { version = "=0.4.14", default_features = false } nix = { version = "0.24", default-features = false, features = ["uio"] } regex = { version = "1.7.0", default_features = false } rtnetlink = "0.8.1" diff --git a/exts/devmaster/src/bin/devctl/main.rs b/exts/devmaster/src/bin/devctl/main.rs index 630b5977b9e4e19be19e94aa7e2cf04a4ec9476e..a3c8f2e4605fc163a31ce37701dfaa301b04a563 100644 --- a/exts/devmaster/src/bin/devctl/main.rs +++ b/exts/devmaster/src/bin/devctl/main.rs @@ -14,10 +14,10 @@ //! #![allow(deprecated)] mod subcmds; -use basic::logger::init_log_to_console; use clap::Parser; use libdevmaster::framework::control_manager::CONTROL_MANAGER_LISTEN_ADDR; -use log::LevelFilter; +use log::logger::init_log_to_console; +use log::Level; use std::{io::Write, net::TcpStream}; use subcmds::devctl_monitor::subcommand_monitor; use subcmds::devctl_test_builtin::subcommand_test_builtin; @@ -104,7 +104,7 @@ fn subcommand_kill() { } fn main() { - init_log_to_console("devctl", LevelFilter::Debug); + init_log_to_console("devctl", Level::Debug); let args = Args::parse(); match args.subcmd { diff --git a/exts/devmaster/src/lib/builtin/blkid.rs b/exts/devmaster/src/lib/builtin/blkid.rs index 2cbf0b2e8aa25f4cc1c672dea8bc95cec97fd051..bb66b7d85085223cb29a68caa88bb719a49b758b 100644 --- a/exts/devmaster/src/lib/builtin/blkid.rs +++ b/exts/devmaster/src/lib/builtin/blkid.rs @@ -498,14 +498,14 @@ impl Builtin for Blkid { #[cfg(test)] mod test { use super::*; - use basic::logger; use device::Device; + use log::logger; use std::path; #[test] #[ignore] fn test_builtin_example() { - logger::init_log_to_console("test_builtin_example", log::LevelFilter::Debug); + logger::init_log_to_console("test_builtin_example", log::Level::Debug); let path = path::Path::new("/sys/class/block/"); if !path.exists() { return; diff --git a/exts/devmaster/src/lib/builtin/input_id.rs b/exts/devmaster/src/lib/builtin/input_id.rs index ed158f19518beacbcbfb73937fc46a39259666b8..e22c99a4f0c64ae1a494b9ee90fe8db489b5c63f 100644 --- a/exts/devmaster/src/lib/builtin/input_id.rs +++ b/exts/devmaster/src/lib/builtin/input_id.rs @@ -740,12 +740,12 @@ impl InputId { mod tests { use super::InputId; use crate::{builtin::Builtin, rules::exec_unit::ExecuteUnit}; - use basic::logger; use device::device_enumerator::DeviceEnumerator; + use log::logger; #[test] fn test_builtin_example() { - logger::init_log_to_console("test_builtin_input_id", log::LevelFilter::Debug); + logger::init_log_to_console("test_builtin_input_id", log::Level::Debug); let mut enumerator = DeviceEnumerator::new(); diff --git a/exts/devmaster/src/lib/config/devmaster_conf.rs b/exts/devmaster/src/lib/config/devmaster_conf.rs index 645d2e672bcdbf76e35d22eff440cd1c34997b04..502bdbcb2fe6e33684600ff86cb21558606708b8 100644 --- a/exts/devmaster/src/lib/config/devmaster_conf.rs +++ b/exts/devmaster/src/lib/config/devmaster_conf.rs @@ -16,8 +16,9 @@ use super::DEFAULT_NETIF_CONFIG_DIRS; use confique::Config; use lazy_static::lazy_static; -use log::LevelFilter; +use log::Level; use std::cell::RefCell; +use std::str::FromStr; /// default configuration path pub const DEFAULT_CONFIG: &str = "/etc/devmaster/config.toml"; @@ -71,20 +72,10 @@ impl DevmasterConfig { } /// get the rules directories - pub fn get_log_level(&self) -> LevelFilter { + pub fn get_log_level(&self) -> Level { match self.inner.borrow().log_level.clone() { - Some(level) => match level.as_str() { - "debug" => LevelFilter::Debug, - "info" => LevelFilter::Info, - "trace" => LevelFilter::Trace, - "warn" => LevelFilter::Warn, - "error" => LevelFilter::Error, - _ => { - println!("unsupported log level, set log level to off"); - LevelFilter::Off - } - }, - None => LevelFilter::Info, + Some(level) => Level::from_str(&level).unwrap(), + None => Level::Info, } } @@ -124,7 +115,7 @@ network_d = [\"/root/network.d\"] assert_eq!(config.get_rules_d(), vec!["/root/rules.d".to_string()]); assert_eq!(config.get_max_workers(), 3); - assert_eq!(config.get_log_level(), LevelFilter::Info); + assert_eq!(config.get_log_level(), Level::Info); assert_eq!( config.get_netif_cfg_d(), vec!["/root/network.d".to_string()] @@ -134,7 +125,7 @@ network_d = [\"/root/network.d\"] let default_conf = DevmasterConfig::new(); assert_eq!(default_conf.get_rules_d(), DEFAULT_RULES_DIRS.to_vec()); assert_eq!(default_conf.get_max_workers(), 3); - assert_eq!(default_conf.get_log_level(), LevelFilter::Info); + assert_eq!(default_conf.get_log_level(), Level::Info); assert_eq!( default_conf.get_netif_cfg_d(), DEFAULT_NETIF_CONFIG_DIRS.to_vec() diff --git a/exts/devmaster/src/lib/framework/devmaster.rs b/exts/devmaster/src/lib/framework/devmaster.rs index b636dc1e372ded8ed38612792debeee69a70b1f6..20cf9c37262d2fcd074f9488a891a8b0528c5b83 100644 --- a/exts/devmaster/src/lib/framework/devmaster.rs +++ b/exts/devmaster/src/lib/framework/devmaster.rs @@ -14,8 +14,8 @@ //! use crate::{config::*, error::*, framework::*, rules::*}; -use basic::logger::init_log_to_console; use event::*; +use log::logger::init_log_to_console; use std::{ cell::RefCell, rc::Rc, diff --git a/exts/devmaster/src/lib/rules/rules_load.rs b/exts/devmaster/src/lib/rules/rules_load.rs index 7ff3f0029420b4c129f4c3bfa53ed274e1e10b7a..9327618acb822fb1faacbdf41c9dea045377a21b 100644 --- a/exts/devmaster/src/lib/rules/rules_load.rs +++ b/exts/devmaster/src/lib/rules/rules_load.rs @@ -1707,8 +1707,8 @@ impl RuleToken { #[cfg(test)] mod tests { use crate::config::*; - use basic::logger::init_log_to_console; - use log::LevelFilter; + use log::logger::init_log_to_console; + use log::Level; use super::*; use std::{fs, path::Path, thread::JoinHandle}; @@ -1735,7 +1735,7 @@ SYMLINK += \"test111111\"", #[test] fn test_rules_new() { - init_log_to_console("test_rules_new", LevelFilter::Debug); + init_log_to_console("test_rules_new", Level::Debug); clear_test_rules_dir("test_rules_new"); create_test_rules_dir("test_rules_new"); let rules = Rules::load_rules(DEFAULT_RULES_DIRS.to_vec(), ResolveNameTime::Early); diff --git a/exts/devmaster/src/lib/utils/mod.rs b/exts/devmaster/src/lib/utils/mod.rs index 5600c8db55aa9e99d93e4b6b1c4ef86d5dcad483..a58543bf72c727f60b7271411f341e4671740d05 100644 --- a/exts/devmaster/src/lib/utils/mod.rs +++ b/exts/devmaster/src/lib/utils/mod.rs @@ -578,9 +578,9 @@ pub(crate) fn cleanup_db(dev: Rc>) -> Result<()> { #[cfg(test)] mod tests { - use basic::logger::init_log_to_console; use device::Device; - use log::LevelFilter; + use log::logger::init_log_to_console; + use log::Level; use super::*; @@ -715,7 +715,7 @@ mod tests { #[test] #[ignore] fn test_spawn() { - init_log_to_console("test_spawn", LevelFilter::Debug); + init_log_to_console("test_spawn", Level::Debug); println!( "{}", diff --git a/exts/fstab/Cargo.toml b/exts/fstab/Cargo.toml index 04dff520b6020e20f8264e4b25e4b0dd1a029179..454515aba72c99ecc756d769c93c96f56495681b 100644 --- a/exts/fstab/Cargo.toml +++ b/exts/fstab/Cargo.toml @@ -6,6 +6,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +log = { path = "../../libs/log" } inotify = { version = "0.9.2", default-features = false } -log = { version = "=0.4.14", default_features = false } nix = { version = "0.24", default-features = false } diff --git a/exts/hostname_setup/Cargo.toml b/exts/hostname_setup/Cargo.toml index fcb38700d2934c0244a19bfc9be0c55fbb0791d6..b802481b90d33768fe9e208c46db2c2820137f2d 100644 --- a/exts/hostname_setup/Cargo.toml +++ b/exts/hostname_setup/Cargo.toml @@ -8,10 +8,9 @@ edition = "2021" [dependencies] basic = { path = "../../libs/basic", features = [ "os_release", - "logger", "cmdline", "config", ] } +log = { path = "../../libs/log" } -log = { version = "=0.4.14", default_features = false } nix = { version = "0.24", default-features = false, features = ["hostname"] } diff --git a/exts/hostname_setup/src/main.rs b/exts/hostname_setup/src/main.rs index d9fe744e55c912985f889cbc4bc80323b36b619d..9bf7a3c30367bf2898ad2b476dc5492aa3b5f40d 100644 --- a/exts/hostname_setup/src/main.rs +++ b/exts/hostname_setup/src/main.rs @@ -12,7 +12,6 @@ //! hostname setup -use basic::logger; use basic::os_release; use basic::proc_cmdline; use nix::Result; @@ -180,7 +179,7 @@ impl Default for Hostname { } fn main() { - logger::init_log_to_console("hostname-setup", log::LevelFilter::Info); + log::logger::init_log_to_console("hostname-setup", log::Level::Info); let mut op_hostname = Hostname::from_cmdline(); if op_hostname.is_none() { op_hostname = Hostname::from_etc_hostname(); diff --git a/exts/random_seed/Cargo.toml b/exts/random_seed/Cargo.toml index f27febaaf964e3f99ec2f6d1787f5870ad7757d3..283c1b164e2bb9f81e639f35a06f9695f207336e 100644 --- a/exts/random_seed/Cargo.toml +++ b/exts/random_seed/Cargo.toml @@ -6,9 +6,9 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -basic = { path = "../../libs/basic", features = ["logger", "config"], default-features = false } +basic = { path = "../../libs/basic", features = ["config"], default-features = false } libc = { version = "0.2.*", default-features = false } -log = { version = "=0.4.14", default_features = false } +log = { path = "../../libs/log" } nix = { version = "0.24", default-features = false } xattr = { version = "0.2.3", default-features = false } diff --git a/exts/random_seed/src/main.rs b/exts/random_seed/src/main.rs index 304414ea75d32625fe51b0417c3c4831df9d3c45..d9ea92552e6118cb762d710e72a54f03c0a3309a 100644 --- a/exts/random_seed/src/main.rs +++ b/exts/random_seed/src/main.rs @@ -17,10 +17,9 @@ use std::{env, process}; mod random_seed; use crate::random_seed::run; -use basic::logger; fn main() { - logger::init_log_to_console("random-seed", log::LevelFilter::Debug); + log::logger::init_log_to_console("random-seed", log::Level::Debug); let args: Vec = env::args().collect(); if args.len() != 2 { log::error!("{}", "This program requires one argument."); diff --git a/exts/rc-local-generator/Cargo.toml b/exts/rc-local-generator/Cargo.toml index 7ff56415e604db9f953bb313a4ec2bfb2c05dd2c..946143ad75c0b9a82392fa86dcfb3970fafe395b 100644 --- a/exts/rc-local-generator/Cargo.toml +++ b/exts/rc-local-generator/Cargo.toml @@ -6,5 +6,5 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -log = { version = "=0.4.14", default_features = false } +log = { path = "../../libs/log" } libc = { version = "0.2", default-features = false } diff --git a/exts/switch_root/Cargo.toml b/exts/switch_root/Cargo.toml index 9d2c05e161740bef1df76b4f647784f4bf8dbda5..3691ec195e894cdd63f94909f4a432da2a5eb3e0 100644 --- a/exts/switch_root/Cargo.toml +++ b/exts/switch_root/Cargo.toml @@ -7,6 +7,6 @@ edition = "2021" [dependencies] basic = { path = "../../libs/basic", features = ["mount", "machine"] } +log = { path = "../../libs/log" } -log = { version = "=0.4.14", default_features = false } nix = { version = "0.24", default-features = false, features = ["mount"] } diff --git a/libs/basic/Cargo.toml b/libs/basic/Cargo.toml index 25c9cdd9857c792cf8bfb698b54547f5264c3c39..4aacf95b8f30fabcc66327c71701a04e3c8c550c 100644 --- a/libs/basic/Cargo.toml +++ b/libs/basic/Cargo.toml @@ -7,11 +7,11 @@ edition = "2021" [dependencies] constants = { path = "../constants" } +log = { path = "../log" } bitflags = { version = "1.3.2", optional = true } pkg-config = { version = "0.3", optional = true } libc = { version = "0.2.140", default-features = false } -log = { version = "=0.4.14", default_features = false, default-features = false } nix = { version = "0.24", default-features = false, features = [ "poll", "dir", @@ -25,7 +25,6 @@ pathdiff = { version = "0.2.1", optional = true } procfs = { version = "0.12.0", default-features = false, optional = true } rand = { version = "0.8.5", optional = true } snafu = { version = "0.7", features = ["std"], default-features = false } -time = { version = "=0.1.45", optional = true } [dev-dependencies] tempfile = "3.6.0" @@ -56,7 +55,6 @@ full = [ "string", "stat", "fd", - "logger", "mount", "naming_scheme", "signal", @@ -78,7 +76,6 @@ file = [] fs = ["pathdiff", "rand"] host = [] io = [] -logger = ["time"] machine = [] memory = [] mount = [] diff --git a/libs/basic/src/condition.rs b/libs/basic/src/condition.rs index 5953f67ef81e0c9267bfabc20e39182f3ac03fa8..0e27d055a5b70da60276767e43daf3c28f51d947 100644 --- a/libs/basic/src/condition.rs +++ b/libs/basic/src/condition.rs @@ -145,7 +145,7 @@ impl Condition { fn test_capability(&self) -> i8 { let values = match crate::capability::Capability::from_str(&self.params) { Err(e) => { - log::error!("Failed to parse ConditionCapability values: {}, assuming ConditionCapability check failed:{}", self.params,e); + println!("Failed to parse ConditionCapability values: {}, assuming ConditionCapability check failed:{}", self.params,e); return 0; } Ok(v) => v, @@ -153,7 +153,7 @@ impl Condition { let file = match File::open("/proc/self/status") { Err(_) => { - log::error!( + println!( "Failed to open /proc/self/status, assuming ConditionCapability check failed." ); return 0; @@ -166,7 +166,7 @@ impl Condition { for line in reader.lines() { let line = match line { Err(_) => { - log::error!("Failed to read /proc/self/status, assuming ConditionCapability check failed."); + println!("Failed to read /proc/self/status, assuming ConditionCapability check failed."); return 0; } Ok(v) => v, @@ -176,9 +176,7 @@ impl Condition { } match u64::from_str_radix(line.trim_start_matches(p).trim_start(), 16) { Err(_) => { - log::error!( - "Failed to parse CapBnd, assuming ConditionCapability check failed" - ); + println!("Failed to parse CapBnd, assuming ConditionCapability check failed"); return 0; } Ok(v) => { @@ -188,7 +186,7 @@ impl Condition { }; } - log::debug!("capability {}{}", cap_bitmask, values); + println!("capability {}{}", cap_bitmask, values); let res = cap_bitmask & values.bitmask(); (res != 0) as i8 } @@ -252,12 +250,12 @@ impl Condition { }; let value = match proc_cmdline::cmdline_get_item(search_value) { Err(_) => { - log::info!("Failed to get cmdline content, assuming ConditionKernelCommandLine check failed."); + println!("Failed to get cmdline content, assuming ConditionKernelCommandLine check failed."); return 0; } Ok(v) => { if v.is_none() { - log::info!( + println!( "/proc/cmdline doesn't contain the given item: {}", search_value ); @@ -266,7 +264,7 @@ impl Condition { v.unwrap() } }; - log::debug!("Found kernel command line value: {}", value); + println!("Found kernel command line value: {}", value); if has_equal { /* has an equal, "crashkernel=512M matches crashkernel=512M" */ self.params.eq(&value) as i8 @@ -327,7 +325,7 @@ impl Condition { * check if the path is a mount point, and chase the * symlink unconditionally*/ statx(fd, path_name.as_ptr(), 0, 0, &mut statxbuf); - log::debug!( + println!( "{} attributes_mask {},stx_attributes{}", self.params, statxbuf.stx_attributes_mask & (STATX_ATTR_MOUNT_ROOT as u64), @@ -372,22 +370,21 @@ impl Condition { } let fd = match open(path, OFlag::O_CLOEXEC | OFlag::O_PATH, stat::Mode::empty()) { Err(e) => { - log::error!( + println!( "Failed to open {} for checking file system permission: {}", - self.params, - e + self.params, e ); return 0; } Ok(v) => v, }; if fd < 0 { - log::error!("Invalid file descriptor."); + println!("Invalid file descriptor."); return 0; } let flags = match fstatvfs(&fd) { Err(e) => { - log::error!("Failed to get the stat of file system: {}", e); + println!("Failed to get the stat of file system: {}", e); return 0; } Ok(v) => v, @@ -448,7 +445,7 @@ mod test { use super::{Condition, ConditionType}; use crate::{ fs_util::write_string_file, - logger, proc_cmdline, + proc_cmdline, security::{self}, }; use core::panic; @@ -456,7 +453,6 @@ mod test { use tempfile::NamedTempFile; fn setup(_type: ConditionType, trigger: i8, revert: i8, params: String) -> Condition { - logger::init_log_to_console("test_condition", log::LevelFilter::Debug); Condition::new(_type, trigger, revert, params) } @@ -938,7 +934,7 @@ mod test { proc_cmdline::proc_cmdline_get_bool("sysmaster.condition-first-boot") { if ret { - log::info!( + println!( "this test cannot be tested because we cannot modify the kernel parameters" ); return; @@ -966,7 +962,7 @@ mod test { proc_cmdline::proc_cmdline_get_bool("sysmaster.condition-first-boot") { if ret { - log::info!( + println!( "this test cannot be tested because we cannot modify the kernel parameters" ); return; diff --git a/libs/basic/src/fs_util.rs b/libs/basic/src/fs_util.rs index a2732b49dfce15a7222504f947fb215de76dd468..96efc68c6072e164d8263e9041e5dd9b7028f5e5 100644 --- a/libs/basic/src/fs_util.rs +++ b/libs/basic/src/fs_util.rs @@ -587,7 +587,6 @@ impl Default for LookupPaths { mod tests { use super::LookupPaths; use super::*; - use crate::logger; use nix::unistd::{self, unlink}; use std::{ fs::{create_dir_all, remove_dir_all, remove_file, File}, @@ -725,7 +724,6 @@ mod tests { #[test] fn test_init_lookup_paths() { - logger::init_log_to_console("test_init_lookup_paths", log::LevelFilter::Trace); let mut lp = LookupPaths::default(); lp.init_lookup_paths(); assert_eq!( diff --git a/libs/basic/src/lib.rs b/libs/basic/src/lib.rs index 22b3fefcd7db1b9bb81e0fe714ef71a912dd6985..b776979e13f98770e94446296ac1f50a36964da0 100644 --- a/libs/basic/src/lib.rs +++ b/libs/basic/src/lib.rs @@ -33,8 +33,6 @@ pub mod fs_util; pub mod host; #[cfg(feature = "io")] pub mod io_util; -#[cfg(feature = "logger")] -pub mod logger; #[cfg(feature = "machine")] pub mod machine; pub mod macros; diff --git a/libs/cgroup/Cargo.toml b/libs/cgroup/Cargo.toml index daf64c3b86471f987143aea12124aaeadd4e6587..2ddcd75cd0915806b7925e3016a2374c4a4116dc 100644 --- a/libs/cgroup/Cargo.toml +++ b/libs/cgroup/Cargo.toml @@ -7,9 +7,9 @@ edition = "2021" [dependencies] basic = { path = "../basic", features = ["fs"] } +log = { path = "../log" } bitflags = "1.3.2" -log = { version = "=0.4.14", default_features = false } nix = { version = "0.24", default-features = false } # regex = { version = "1.6.0", default-features = false, features = ["std"] } snafu = { version = "0.7", default-features = false } diff --git a/libs/device/Cargo.toml b/libs/device/Cargo.toml index 2eeb2d7b791af07f6f848f72e7720f892ee2c71a..a76e3f447096c9f04bd53145aa19872024752f41 100644 --- a/libs/device/Cargo.toml +++ b/libs/device/Cargo.toml @@ -9,12 +9,12 @@ edition = "2021" # internal libraries basic = { path = "../basic", features = ["parse"] } event = { path = "../event" } +log = { path = "../log" } # third libraries bitflags = "1.3.2" fnmatch-regex = "0.2.0" libc = { default-features = false, version = "0.2.140" } -log = { version = "=0.4.14", default_features = false } loopdev = "0.4.0" nix = { default-features = false, version = "0.24" } regex = { default-features = false, version = "1.7.0" } diff --git a/libs/kmod_rs/Cargo.toml b/libs/kmod_rs/Cargo.toml index 08953aa8ae9b1a50552f8ca44fa34caa1cd76677..6caa0c59389dec5a0b70a3b9659422d4178ed7ef 100644 --- a/libs/kmod_rs/Cargo.toml +++ b/libs/kmod_rs/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] basic = { path = "../basic" } +log = { path = "../log" } kmod-sys = "0.2.0" -log = { version = "=0.4.14", default_features = false } nix = { default-features = false, version = "0.24" } diff --git a/libs/log/Cargo.toml b/libs/log/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..840d79cb2569646206486b06cab96dfd18b6d12c --- /dev/null +++ b/libs/log/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "log" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +log = { version = "=0.4.14", default_features = false} +libc = { version = "0.2.*" } +constants = { path = "../constants" } diff --git a/libs/log/src/inner.rs b/libs/log/src/inner.rs new file mode 100644 index 0000000000000000000000000000000000000000..479d1000d37c4b51c3c35f811d1bb57d56b73d7e --- /dev/null +++ b/libs/log/src/inner.rs @@ -0,0 +1,357 @@ +// Copyright (c) 2022 Huawei Technologies Co.,Ltd. All rights reserved. +// +// sysMaster is licensed under Mulan PSL v2. +// You can use this software according to the terms and conditions of the Mulan +// PSL v2. +// You may obtain a copy of Mulan PSL v2 at: +// http://license.coscl.org.cn/MulanPSL2 +// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY +// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +// See the Mulan PSL v2 for more details. + +//! +use std::{ + cmp, fmt, + io::{Error, ErrorKind}, + mem, + str::FromStr, + sync::{ + atomic::{AtomicUsize, Ordering}, + RwLock, + }, +}; + +use log::{LevelFilter, Log, Record}; + +static mut LOGGER_LOCK: Option> = None; + +static STATE: AtomicUsize = AtomicUsize::new(0); + +const UNINITIALIZED: usize = 0; +const INITIALIZING: usize = 1; +const INITIALIZED: usize = 2; + +/// +#[repr(usize)] +#[derive(Copy, Eq, Debug)] +pub enum Level { + /// + Error = 1, + /// + Warn, + /// + Info, + /// + Debug, + /// + Trace, +} + +impl Level { + /// + pub fn to_ori_level(&self) -> log::Level { + match self { + Level::Error => log::Level::Error, + Level::Warn => log::Level::Warn, + Level::Info => log::Level::Info, + Level::Debug => log::Level::Debug, + Level::Trace => log::Level::Trace, + } + } +} + +impl FromStr for Level { + type Err = std::io::Error; + + fn from_str(s: &str) -> Result { + match s { + "error" => Ok(Level::Error), + "warn" => Ok(Level::Warn), + "info" => Ok(Level::Info), + "debug" => Ok(Level::Debug), + "trace" => Ok(Level::Trace), + _ => Ok(Level::Info), + } + } +} + +impl Clone for Level { + #[inline] + fn clone(&self) -> Level { + *self + } +} + +impl PartialEq for Level { + #[inline] + fn eq(&self, other: &Level) -> bool { + *self as usize == *other as usize + } +} + +impl PartialEq for Level { + #[inline] + fn eq(&self, other: &LevelFilter) -> bool { + *self as usize == *other as usize + } +} + +impl PartialOrd for Level { + #[inline] + fn partial_cmp(&self, other: &Level) -> Option { + Some(self.cmp(other)) + } + + #[inline] + fn lt(&self, other: &Level) -> bool { + (*self as usize) < *other as usize + } + + #[inline] + fn le(&self, other: &Level) -> bool { + *self as usize <= *other as usize + } + + #[inline] + fn gt(&self, other: &Level) -> bool { + *self as usize > *other as usize + } + + #[inline] + fn ge(&self, other: &Level) -> bool { + *self as usize >= *other as usize + } +} + +impl PartialOrd for Level { + #[inline] + fn partial_cmp(&self, other: &LevelFilter) -> Option { + Some((*self as usize).cmp(&(*other as usize))) + } + + #[inline] + fn lt(&self, other: &LevelFilter) -> bool { + (*self as usize) < *other as usize + } + + #[inline] + fn le(&self, other: &LevelFilter) -> bool { + *self as usize <= *other as usize + } + + #[inline] + fn gt(&self, other: &LevelFilter) -> bool { + *self as usize > *other as usize + } + + #[inline] + fn ge(&self, other: &LevelFilter) -> bool { + *self as usize >= *other as usize + } +} + +impl Ord for Level { + #[inline] + fn cmp(&self, other: &Level) -> cmp::Ordering { + (*self as usize).cmp(&(*other as usize)) + } +} + +/// Set the global logger +pub fn set_boxed_logger(logger: Box) -> Result<(), Error> { + set_logger_inner(|| Box::leak(logger)) +} + +fn set_logger_inner(make_logger: F) -> Result<(), Error> +where + F: FnOnce() -> &'static dyn Log, +{ + let old_state = match STATE.compare_exchange( + UNINITIALIZED, + INITIALIZING, + Ordering::SeqCst, + Ordering::SeqCst, + ) { + Ok(s) | Err(s) => s, + }; + match old_state { + INITIALIZED | UNINITIALIZED => { + unsafe { + match &LOGGER_LOCK { + Some(v) => { + let mut a = v.write().unwrap(); + *a = make_logger(); + STATE.store(INITIALIZED, Ordering::SeqCst); + return Ok(()); + } + None => {} + } + } + unsafe { + LOGGER_LOCK = Some(RwLock::new(make_logger())); + STATE.store(INITIALIZED, Ordering::SeqCst); + Ok(()) + } + } + INITIALIZING => { + while STATE.load(Ordering::SeqCst) == INITIALIZING { + #[allow(deprecated)] + std::sync::atomic::spin_loop_hint(); + } + Err(Error::from(ErrorKind::InvalidData)) + } + _ => Err(Error::from(ErrorKind::Other)), + } +} + +/// +#[macro_export] +macro_rules! __log_format_args { + ($($args:tt)*) => { + format_args!($($args)*) + }; +} + +/// +#[macro_export] +macro_rules! __log_module_path { + () => { + module_path!() + }; +} + +/// +#[macro_export] +macro_rules! __log_file { + () => { + file!() + }; +} + +/// +#[macro_export] +macro_rules! __log_line { + () => { + line!() + }; +} + +static MAX_LOG_LEVEL_FILTER: AtomicUsize = AtomicUsize::new(0); + +/// +#[inline(always)] +pub fn max_level() -> Level { + unsafe { mem::transmute(MAX_LOG_LEVEL_FILTER.load(Ordering::Relaxed)) } +} + +/// +#[inline] +pub fn set_max_level(level: Level) { + MAX_LOG_LEVEL_FILTER.store(level as usize, Ordering::SeqCst) +} + +/// +#[macro_export(local_inner_macros)] +macro_rules! log { + (target: $target:expr, $lvl:expr, $($arg:tt)+) => ({ + let lvl = $lvl; + if lvl <= $crate::inner::max_level() { + $crate::inner::__private_api_log( + __log_format_args!($($arg)+), + lvl, + &($target, __log_module_path!(), __log_file!(), __log_line!()), + ); + } + }); + ($lvl:expr, $($arg:tt)+) => (log!(target: __log_module_path!(), $lvl, $($arg)+)) +} + +/// +#[macro_export(local_inner_macros)] +macro_rules! error { + (target: $target:expr, $($arg:tt)+) => ( + log!(target: $target, $crate::log::Level::Error, $($arg)+) + ); + ($($arg:tt)+) => ( + log!($crate::inner::Level::Error, $($arg)+) + ) +} + +/// +#[macro_export(local_inner_macros)] +macro_rules! warn { + (target: $target:expr, $($arg:tt)+) => ( + log!(target: $target, $crate::log::Level::Warn, $($arg)+) + ); + ($($arg:tt)+) => ( + log!($crate::inner::Level::Warn, $($arg)+) + ) +} + +/// +#[macro_export(local_inner_macros)] +macro_rules! info { + (target: $target:expr, $($arg:tt)+) => ( + log!(target: $target, $crate::log::Level::Info, $($arg)+) + ); + ($($arg:tt)+) => ( + log!($crate::inner::Level::Info, $($arg)+) + ) +} + +/// +#[macro_export(local_inner_macros)] +macro_rules! debug { + (target: $target:expr, $($arg:tt)+) => ( + log!(target: $target, $crate::log::Level::Debug, $($arg)+) + ); + ($($arg:tt)+) => ( + log!($crate::inner::Level::Debug, $($arg)+) + ) +} + +/// +#[macro_export(local_inner_macros)] +macro_rules! trace { + (target: $target:expr, $($arg:tt)+) => ( + log!(target: $target, $crate::logger::Level::Trace, $($arg)+) + ); + ($($arg:tt)+) => ( + log!($crate::inner::Level::Trace, $($arg)+) + ) +} + +/// +/* Private, shouldn't be used out of this file. */ +pub fn __private_api_log( + args: fmt::Arguments, + level: Level, + &(target, module_path, file, line): &(&str, &'static str, &'static str, u32), +) { + if STATE.load(Ordering::SeqCst) != INITIALIZED { + return; + } + let logger = unsafe { &LOGGER_LOCK }; + match logger { + Some(v) => { + v.read().unwrap().log( + &Record::builder() + .args(args) + .level(level.to_ori_level()) + .target(target) + .module_path_static(Some(module_path)) + .file_static(Some(file)) + .line(Some(line)) + .build(), + ); + } + None => {} + } +} + +pub use crate::debug; +pub use crate::error; +pub use crate::info; +pub use crate::trace; +pub use crate::warn; diff --git a/libs/log/src/lib.rs b/libs/log/src/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..11877bab4dddd6b569780fa4ee46685cf9a3325b --- /dev/null +++ b/libs/log/src/lib.rs @@ -0,0 +1,18 @@ +// Copyright (c) 2022 Huawei Technologies Co.,Ltd. All rights reserved. +// +// sysMaster is licensed under Mulan PSL v2. +// You can use this software according to the terms and conditions of the Mulan +// PSL v2. +// You may obtain a copy of Mulan PSL v2 at: +// http://license.coscl.org.cn/MulanPSL2 +// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY +// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +// See the Mulan PSL v2 for more details. + +//! +pub mod inner; +pub mod logger; + +/// +pub use inner::Level; diff --git a/libs/basic/src/logger.rs b/libs/log/src/logger.rs similarity index 69% rename from libs/basic/src/logger.rs rename to libs/log/src/logger.rs index bb16aaf9f699d5af3dbee209976322c228609e0b..7f059e5693b1dc202c12eab85125a86dff59f64c 100644 --- a/libs/basic/src/logger.rs +++ b/libs/log/src/logger.rs @@ -11,31 +11,45 @@ // See the Mulan PSL v2 for more details. //! -use crate::Error; use constants::LOG_FILE_PATH; -use log::{LevelFilter, Log}; +use log::Log; use std::{ fs::{self, File, OpenOptions}, io::Write, + io::{Error, ErrorKind}, os::unix::{ net::UnixDatagram, prelude::{OpenOptionsExt, PermissionsExt}, }, path::{Path, PathBuf}, - sync::{Arc, Mutex}, + sync::{ + atomic::{AtomicU32, Ordering}, + Arc, Mutex, + }, }; +pub use crate::inner::Level; +pub use crate::inner::{debug, error, info, trace, warn}; + +static mut LOG_LEVEL: AtomicU32 = AtomicU32::new(4); +static mut LOG_TARGET: AtomicU32 = AtomicU32::new(0); +static mut LOG_FILE_SIZE: AtomicU32 = AtomicU32::new(1024); +static mut LOG_FILE_NUMBER: AtomicU32 = AtomicU32::new(5); + fn write_msg_common(writer: &mut impl Write, module: &str, msg: String) { - let now = time::now(); - let now_str = format!( - "{:0>4}-{:0>2}-{:0>2} {:0>2}:{:0>2}:{:0>2} ", - now.tm_year + 1900, /* tm_year is years since 1900 */ - now.tm_mon + 1, /* tm_mon is months since Jan: [0, 11] */ - now.tm_mday, - now.tm_hour, - now.tm_min, - now.tm_sec - ); + let time: libc::time_t = unsafe { libc::time(std::ptr::null_mut()) }; + let now = unsafe { libc::localtime(&time) }; + let now_str = unsafe { + format!( + "{:0>4}-{:0>2}-{:0>2} {:0>2}:{:0>2}:{:0>2} ", + (*now).tm_year + 1900, /* tm_year is years since 1900 */ + (*now).tm_mon + 1, /* tm_mon is months since Jan: [0, 11] */ + (*now).tm_mday, + (*now).tm_hour, + (*now).tm_min, + (*now).tm_sec + ) + }; /* 1. Write time */ if let Err(e) = writer.write(now_str.as_bytes()) { @@ -243,17 +257,13 @@ impl FileLogger { fn rotate(&self) -> Result<(), Error> { let dir = match self.file_path.parent() { None => { - return Err(Error::Other { - msg: "Cannot determine the parent directory of log file".to_string(), - }) + return Err(Error::from(ErrorKind::NotFound)); } Some(v) => v, }; let file_name = match self.file_path.file_name() { None => { - return Err(Error::Other { - msg: "Cannot determine the file name of log file".to_string(), - }) + return Err(Error::from(ErrorKind::InvalidData)); } Some(v) => v.to_string_lossy().to_string(), }; @@ -262,7 +272,7 @@ impl FileLogger { /* Walk through the parent directory, save the suffix rotate number in num_list */ let mut num_list: Vec = Vec::new(); let read_dir = match dir.read_dir() { - Err(e) => return Err(Error::Io { source: e }), + Err(e) => return Err(e), Ok(v) => v, }; for de in read_dir { @@ -358,7 +368,7 @@ impl CombinedLogger { /// file_number: the maximum number of rotated log files (valid when target == "file") pub fn init_log_for_subum( app_name: &str, - level: LevelFilter, + level: Level, target: &str, file_size: u32, file_number: u32, @@ -374,7 +384,7 @@ pub fn init_log_for_subum( /// [`app_name`]: which app output the log /// /// level: maximum log level -pub fn init_log_to_console(app_name: &str, level: LevelFilter) { +pub fn init_log_to_console(app_name: &str, level: Level) { init_log(app_name, level, "console-syslog", 0, 0); } @@ -387,7 +397,7 @@ pub fn init_log_to_console(app_name: &str, level: LevelFilter) { /// file_size: the maximum size of an active log file /// /// file_number: the maximum number of rotated log files -pub fn init_log_to_file(app_name: &str, level: LevelFilter, file_size: u32, file_number: u32) { +pub fn init_log_to_file(app_name: &str, level: Level, file_size: u32, file_number: u32) { init_log(app_name, level, "file", file_size, file_number); } @@ -402,13 +412,22 @@ pub fn init_log_to_file(app_name: &str, level: LevelFilter, file_size: u32, file /// file_size: the maximum size of an active log file (valid when target == "file") /// /// file_number: the maximum number of rotated log files (valid when target == "file") -pub fn init_log( - _app_name: &str, - level: LevelFilter, - target: &str, - file_size: u32, - file_number: u32, -) { +pub fn init_log(_app_name: &str, level: Level, target: &str, file_size: u32, file_number: u32) { + let level_num: u32 = match level { + Level::Error => 0, + Level::Warn => 1, + Level::Info => 2, + Level::Debug => 3, + Level::Trace => 4, + }; + + let target_num: u32 = match target { + "syslog" => 0, + "console-syslog" => 1, + "file" => 2, + _ => 0, + }; + let mut target = target; if target == "file" && (file_size == 0 || file_number == 0) { println!( @@ -422,7 +441,7 @@ pub fn init_log( if target == "syslog" { match SysLogger::connect() { Ok(l) => { - if let Err(e) = log::set_boxed_logger(Box::new(l)) { + if let Err(e) = crate::inner::set_boxed_logger(Box::new(l)) { eprint!("Failed to set logger: {:?}", e); } } @@ -430,9 +449,16 @@ pub fn init_log( eprint!("Failed to connect to /dev/log: {:?}", e); } } - log::set_max_level(level); + crate::inner::set_max_level(level); + + unsafe { + LOG_LEVEL.store(level_num, Ordering::SeqCst); + LOG_TARGET.store(target_num, Ordering::SeqCst); + } + return; } + if target == "console-syslog" { let mut logger = CombinedLogger::empty(); logger.push(Box::new(ConsoleLogger)); @@ -446,36 +472,128 @@ pub fn init_log( } } - if let Err(e) = log::set_boxed_logger(Box::new(logger)) { + if let Err(e) = crate::inner::set_boxed_logger(Box::new(logger)) { eprintln!("Failed to set logger: {:?}", e); } - log::set_max_level(level); + crate::inner::set_max_level(level); + + unsafe { + LOG_LEVEL.store(level_num, Ordering::SeqCst); + LOG_TARGET.store(target_num, Ordering::SeqCst); + } + return; } + + if target == "file" { + let _ = crate::inner::set_boxed_logger(Box::new(FileLogger::new( + log::Level::Debug, + PathBuf::from(LOG_FILE_PATH), + 0o600, + file_size, + file_number, + ))); + crate::inner::set_max_level(level); + + unsafe { + LOG_LEVEL.store(level_num, Ordering::SeqCst); + LOG_TARGET.store(target_num, Ordering::SeqCst); + LOG_FILE_NUMBER.store(file_number, Ordering::SeqCst); + LOG_FILE_SIZE.store(file_size, Ordering::SeqCst); + } + } +} + +/// Reinit the logger based on the former configuration +pub fn reinit() { + let level = match unsafe { LOG_LEVEL.load(Ordering::SeqCst) } { + 0 => Level::Error, + 1 => Level::Warn, + 2 => Level::Info, + 3 => Level::Debug, + 4 => Level::Trace, + _ => Level::Info, + }; + + let mut target: &str = match unsafe { LOG_TARGET.load(Ordering::SeqCst) } { + 0 => "syslog", + 1 => "console-syslog", + 2 => "file", + _ => "syslog", + }; + + let file_size = unsafe { LOG_FILE_SIZE.load(Ordering::SeqCst) }; + let file_number = unsafe { LOG_FILE_NUMBER.load(Ordering::SeqCst) }; + + if target == "file" && (file_size == 0 || file_number == 0) { + println!( + "LogTarget is configured to `file`, but configuration is invalid, changing the \ + LogTarget to `syslog`, file_size: {}, file_number: {}", + file_size, file_number + ); + target = "syslog"; + } + + if target == "syslog" { + match SysLogger::connect() { + Ok(l) => { + if let Err(e) = crate::inner::set_boxed_logger(Box::new(l)) { + eprint!("Failed to set logger: {:?}", e); + } + } + Err(e) => { + eprint!("Failed to connect to /dev/log: {:?}", e); + } + } + crate::inner::set_max_level(level); + return; + } + + if target == "console-syslog" { + let mut logger = CombinedLogger::empty(); + logger.push(Box::new(ConsoleLogger)); + + match SysLogger::connect() { + Ok(l) => { + logger.push(Box::new(l)); + } + Err(e) => { + eprint!("Failed to connect to /dev/log: {:?}", e); + } + } + + if let Err(e) = crate::inner::set_boxed_logger(Box::new(logger)) { + eprintln!("Failed to set logger: {:?}", e); + } + crate::inner::set_max_level(level); + return; + } + if target == "file" { - let _ = log::set_boxed_logger(Box::new(FileLogger::new( + let _ = crate::inner::set_boxed_logger(Box::new(FileLogger::new( log::Level::Debug, PathBuf::from(LOG_FILE_PATH), 0o600, file_size, file_number, ))); - log::set_max_level(level); + crate::inner::set_max_level(level); } } #[cfg(test)] mod tests { use super::*; - use log; #[test] fn test_init_log_to_console() { - init_log_to_console("test", LevelFilter::Debug); - // assert_eq!((), ()); - log::info!("test for logger info"); - log::error!("test for logger error"); - log::warn!("test for logger warn"); - log::debug!("test for logger debug"); - log::trace!("test for logger trace"); + init_log_to_console("test", Level::Debug); + crate::error!("hello, error!"); + crate::inner::set_max_level(Level::Info); + crate::info!("hello, info!"); /* Won't print */ + crate::debug!("hello debug!"); + init_log("test", Level::Debug, "syslog", 0, 0); + crate::debug!("hello debug2!"); /* Only print in the syslog */ + reinit(); + crate::debug!("hello debug3!"); /* Only print in the syslog */ } }