diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bc3702c2220711e43afe22836651b167e6a6106c..bb3e3ae04cb5038f6f526972eacdaa7f1db7249e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -93,6 +93,14 @@ repos: pass_filenames: false files: \.(rs|toml)$ verbose: true + - id: cargo-test-tmpfile-cleanup + name: tmpfile cleanup + description: tmpfile cleanup. + entry: bash -c 'rm -rf target/*/reliability/' + language: system + pass_filenames: false + files: \.(rs|toml)$ + verbose: true - id: cargo-test name: cargo test description: test the package for errors. diff --git a/Cargo.lock b/Cargo.lock index 684a0783cb777741c007b1a59dbc12f0e5c9be0c..f61585bb30a82dcbfcc40af80c8ec8cc0070eae2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -47,17 +47,6 @@ version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - [[package]] name = "autocfg" version = "1.1.0" @@ -487,19 +476,6 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" -[[package]] -name = "env_logger" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" -dependencies = [ - "atty", - "humantime", - "log 0.4.14", - "regex", - "termcolor", -] - [[package]] name = "epoll" version = "4.3.1" @@ -795,15 +771,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - [[package]] name = "hermit-abi" version = "0.3.2" @@ -836,12 +803,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hwdb" version = "0.5.0" @@ -948,7 +909,7 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi", "libc", "windows-sys 0.48.0", ] @@ -993,16 +954,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "kernlog" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dd79b6ea06a97c93bc5587fba4c2ed6d723b939d35d5e3fb3c6870d12e6d17" -dependencies = [ - "libc", - "log 0.4.14", -] - [[package]] name = "kmod-sys" version = "0.2.0" @@ -1110,7 +1061,6 @@ dependencies = [ name = "log" version = "0.5.0" dependencies = [ - "constants", "libc", "log 0.4.14", ] @@ -1342,7 +1292,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi", "libc", ] @@ -1985,9 +1935,7 @@ dependencies = [ name = "sysMaster" version = "0.5.0" dependencies = [ - "env_logger", - "kernlog", - "log 0.4.14", + "log 0.5.0", "mio", "nix 0.24.3", ] @@ -2073,15 +2021,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - [[package]] name = "textwrap" version = "0.15.2" diff --git a/Cargo.toml b/Cargo.toml index 091e1e9ac68363eb75522f129ec2dca0525eeace..c2d380b58d56ded07c3eb83231352e3f9aa77076 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ name = "init" path = "init/main.rs" [dependencies] -log = { version = "=0.4.14", default_features = false, features = ["std"] } +log = { path = "libs/log" } mio = { version = "0.8.8", default_features = false, features = [ "os-poll", "os-ext", @@ -26,8 +26,7 @@ nix = { version = "0.24", default-features = false, features = [ "time", "user", ] } -kernlog = "0.3.1" -env_logger = "0.9.0" + # tempfile = "=3.6.0" # 此为开发配置文件, 给 `cargo build` 所使用. diff --git a/core/libcore/src/unit/umif.rs b/core/libcore/src/unit/umif.rs index 2cdab7f915bbd129644a7f3833fe7f03ebe65b7f..8297e42d7de6e9cd53415584364ab537afd94eee 100755 --- a/core/libcore/src/unit/umif.rs +++ b/core/libcore/src/unit/umif.rs @@ -232,17 +232,17 @@ pub trait UnitManagerObj: UnitMngUtil + ReStation { #[macro_export] macro_rules! declare_umobj_plugin { ($unit_type:ty, $constructor:path) => { - use log::Level; + use log::LevelFilter; /// method for create the sub-unit-manager instance #[cfg_attr(feature = "plugin", no_mangle)] pub fn __um_obj_create( - level: Level, + level: LevelFilter, target: &str, file_size: u32, file_number: u32, ) -> *mut dyn $crate::unit::UnitManagerObj { #[cfg(feature = "plugin")] - log::logger::init_log( + log::init_log( PLUGIN_NAME, level, target.split(&[' ', '-'][..]).collect(), diff --git a/core/sysmaster/src/job/junit.rs b/core/sysmaster/src/job/junit.rs index dcc9e84a897a900532ac470224fd99881494f320..7f3e84010c7e044730075c041251c54ac282ac5e 100755 --- a/core/sysmaster/src/job/junit.rs +++ b/core/sysmaster/src/job/junit.rs @@ -817,7 +817,6 @@ mod tests { use crate::unit::{JobMode, UnitRe}; use core::rel::{ReliConf, Reliability}; use event::Events; - use log::logger; #[test] fn juv_api_len() { @@ -1352,7 +1351,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("create_unit", log::Level::Trace); + log::init_log_to_console("create_unit", 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 ee8b343662d5418c6caf12780629e805a3386a0f..bcf2d9db96d8a8e046477e86485590cf411e5c5d 100755 --- a/core/sysmaster/src/job/manager.rs +++ b/core/sysmaster/src/job/manager.rs @@ -819,12 +819,11 @@ mod tests { use crate::unit::UnitRe; use core::rel::ReliConf; use core::unit::UnitRelations; - use log::logger; //#[test] #[allow(dead_code)] fn job_reli() { - logger::init_log_to_console("job_reli", log::Level::Trace); + log::init_log_to_console("job_reli", log::Level::Trace); let reli = Rc::new(Reliability::new( ReliConf::new().set_max_dbs(RELI_HISTORY_MAX_DBS), )); @@ -1182,7 +1181,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("create_unit", log::Level::Trace); + log::init_log_to_console("create_unit", 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 a2f377616bc3f9172afcd62ad82a1eadfd675804..a826173e539206e7786755c853b51a3fca0ad411 100755 --- a/core/sysmaster/src/job/notify.rs +++ b/core/sysmaster/src/job/notify.rs @@ -147,7 +147,6 @@ mod tests { use crate::unit::UnitX; use core::rel::{ReliConf, Reliability}; - use log::logger; #[test] fn jn_api() { @@ -195,7 +194,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("create_unit", log::Level::Trace); + log::init_log_to_console("create_unit", 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 33c3d3145507e73e36f804aa708d075cc4719434..d6e924d7a4b7425e92105d535cd87e47437976a2 100755 --- a/core/sysmaster/src/job/stat.rs +++ b/core/sysmaster/src/job/stat.rs @@ -450,7 +450,6 @@ mod tests { use crate::unit::UnitX; use core::rel::{ReliConf, Reliability}; use event::Events; - use log::logger; #[test] fn js_api() { @@ -503,7 +502,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("create_unit", log::Level::Trace); + log::init_log_to_console("create_unit", 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 cb496da42e0407467254a0aaf56ee313ef707e4e..605396536e4cf7e17af0b4e5ee9184e93e62c2e3 100755 --- a/core/sysmaster/src/job/table.rs +++ b/core/sysmaster/src/job/table.rs @@ -1032,7 +1032,6 @@ mod tests { use crate::unit::UnitRe; use core::rel::{ReliConf, Reliability}; use event::Events; - use log::logger; #[test] fn job_table_record_suspend() { @@ -1064,7 +1063,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("create_unit", log::Level::Trace); + log::init_log_to_console("create_unit", 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 e2e23e374f0c410299a3b9c90ebf7a9c09c7db2c..870b83e99c40125471f3300c5980a8740bb2e070 100755 --- a/core/sysmaster/src/job/transaction.rs +++ b/core/sysmaster/src/job/transaction.rs @@ -421,7 +421,6 @@ mod tests { use core::rel::{ReliConf, Reliability}; use core::unit::UnitRelations; use event::Events; - use log::logger; #[test] fn jt_api_expand_check() {} @@ -719,7 +718,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("create_unit", log::Level::Trace); + log::init_log_to_console("create_unit", 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 7a06eee7be3057263a89ba5aad6a36e4e2d1d3d1..2100817c9d4d7484fc11d9ef24f39083b2d16dfd 100755 --- a/core/sysmaster/src/main.rs +++ b/core/sysmaster/src/main.rs @@ -87,7 +87,7 @@ fn main() -> Result<()> { let system = Mode::System; let manager_config = Rc::new(RefCell::new(ManagerConfig::new(&system))); - log::logger::init_log( + log::init_log( "sysmaster", Level::from_str(&manager_config.borrow().LogLevel).unwrap(), manager_config diff --git a/core/sysmaster/src/manager/mod.rs b/core/sysmaster/src/manager/mod.rs index a6788e43b35ac82b1b9bdece1a1307b36b96a8bc..d377bfd4170e40d7a3238ffc96aca741d344e16d 100755 --- a/core/sysmaster/src/manager/mod.rs +++ b/core/sysmaster/src/manager/mod.rs @@ -374,7 +374,7 @@ impl Manager { fn reload(&self) { self.config.borrow_mut().reload(&self.mode); - log::logger::init_log( + log::init_log( "sysmaster", Level::from_str(&self.config.borrow().LogLevel).unwrap(), self.config @@ -598,12 +598,11 @@ impl Manager { #[cfg(test)] mod tests { use super::*; - use log::logger; //#[test] #[allow(dead_code)] fn manager_api() { - logger::init_log_to_console("manager_api", log::Level::Trace); + log::init_log_to_console("manager_api", log::Level::Trace); // new let manager = Manager::new( diff --git a/core/sysmaster/src/plugin/mod.rs b/core/sysmaster/src/plugin/mod.rs index f87904a08c76f15117120824f8a0df39087c91bc..f2cda39542988625a998339ec441deacbacca513 100755 --- a/core/sysmaster/src/plugin/mod.rs +++ b/core/sysmaster/src/plugin/mod.rs @@ -524,7 +524,12 @@ impl Plugin { Ok(v) => v, }; - let boxed_raw = fun(log::max_level(), target, file_size, file_number); + let boxed_raw = fun( + log::max_level().to_level_filter(), + target, + file_size, + file_number, + ); Ok(unsafe { Box::from_raw(boxed_raw) }) } @@ -566,7 +571,6 @@ impl Plugin { mod tests { use core::unit::UmIf; - use log::logger; use super::*; // use services::service::ServiceUnit; @@ -575,7 +579,7 @@ mod tests { impl UmIf for UmIfD {} fn init_test() -> Arc { - logger::_init_log( + log::init_log( log::Level::Trace, vec!["console", "syslog"], "", diff --git a/core/sysmaster/src/unit/datastore/child.rs b/core/sysmaster/src/unit/datastore/child.rs index 23997c8c3a9f0e2e3d5e64465dabce14e6bf6300..019d7085307a813efa905c4f2ca335c2a54302ba 100755 --- a/core/sysmaster/src/unit/datastore/child.rs +++ b/core/sysmaster/src/unit/datastore/child.rs @@ -167,7 +167,6 @@ mod tests { use crate::unit::rentry::UnitRe; use crate::unit::test::test_utils; use core::rel::{ReliConf, Reliability}; - use log::logger; #[test] #[should_panic] @@ -248,7 +247,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("create_unit", log::Level::Trace); + log::init_log_to_console("create_unit", 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 3ca0a37f5f6659b88d380ca10a933e09d39d3090..b31644dc93556a170fe11e83d1fb8858c29949a4 100755 --- a/core/sysmaster/src/unit/datastore/deps.rs +++ b/core/sysmaster/src/unit/datastore/deps.rs @@ -392,7 +392,6 @@ mod tests { use crate::unit::data::DataManager; use crate::unit::test::test_utils; use core::rel::{ReliConf, Reliability}; - use log::logger; #[test] fn dep_insert() { @@ -579,7 +578,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("create_unit", log::Level::Trace); + log::init_log_to_console("create_unit", 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 a0c73e05d09ebecd0c2e6fbb990e8d772e8c0c65..58d5af11297fabcd4c16503d9ddaa2b8d7369305 100755 --- a/core/sysmaster/src/unit/datastore/sets.rs +++ b/core/sysmaster/src/unit/datastore/sets.rs @@ -89,7 +89,6 @@ mod tests { use crate::unit::rentry::UnitRe; use crate::unit::test::test_utils; use core::rel::{ReliConf, Reliability}; - use log::logger; #[test] fn sets_insert() { @@ -208,7 +207,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("create_unit", log::Level::Trace); + log::init_log_to_console("create_unit", 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 b71495668ef6d3df96005f8474176922a4cf03d1..2b1115d3438385da1f289186cd28a19796b52aac 100755 --- a/core/sysmaster/src/unit/entry/uentry.rs +++ b/core/sysmaster/src/unit/entry/uentry.rs @@ -812,7 +812,6 @@ mod tests { use basic::fs_util::LookupPaths; use core::rel::{ReliConf, Reliability}; use core::unit::UnitType; - use log::logger; use std::rc::Rc; use crate::{ @@ -820,7 +819,7 @@ mod tests { unit::util::{self, UnitFile}, }; fn unit_init() -> Rc { - logger::init_log_to_console("unit_init", log::Level::Trace); + log::init_log_to_console("unit_init", 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 d1ee9381960f462e1aa801804670916cd49d31c4..60a87070ef09efb035f566cff078a04e820df132 100755 --- a/core/sysmaster/src/unit/execute/spawn.rs +++ b/core/sysmaster/src/unit/execute/spawn.rs @@ -244,8 +244,8 @@ fn exec_child(unit: &Unit, cmdline: &ExecCommand, params: &ExecParameters, ctx: let ret = close_all_fds(&keep_fds); /* Reinit the logger before logging, and set the mode to open_when_needed. */ - log::logger::set_open_when_needed(true); - log::logger::reinit(); + log::set_open_when_needed(true); + log::reinit(); log::debug!("Logger has been re-enabled."); if !ret { diff --git a/core/sysmaster/src/unit/manager.rs b/core/sysmaster/src/unit/manager.rs index 8e0b31af6dbd25d7ee3ac7b922ae15b4807b0375..3f2da448ae085a273666276d892d37849b902879 100755 --- a/core/sysmaster/src/unit/manager.rs +++ b/core/sysmaster/src/unit/manager.rs @@ -1428,7 +1428,7 @@ mod tests { use std::time::Duration; fn init_dm_for_test() -> (Rc, Rc, Rc) { - log::logger::init_log_to_console("init_dm_for_test", log::Level::Trace); + log::init_log_to_console("init_dm_for_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 6b6757796b1cc3f64f06aa63c4813bf72fe17456..20d50ee66b0e3049654d65fd1e4c78e0e269a537 100755 --- a/core/sysmaster/src/unit/runtime.rs +++ b/core/sysmaster/src/unit/runtime.rs @@ -481,7 +481,6 @@ mod tests { use crate::unit::rentry::UnitRe; use crate::unit::test; use core::rel::{ReliConf, Reliability}; - use log::logger; #[test] fn rt_push_load_queue() { @@ -568,7 +567,7 @@ mod tests { rentryr: &Rc, name: &str, ) -> Rc { - logger::init_log_to_console("create_unit", log::Level::Trace); + log::init_log_to_console("create_unit", log::Level::Trace); log::info!("test"); test::test_utils::create_unit_for_test_pub(dmr, relir, rentryr, name) } diff --git a/exts/devmaster/src/bin/devctl/main.rs b/exts/devmaster/src/bin/devctl/main.rs index 8c56459f686fea61cd7bc21af708f6aa3fb33c69..68b053ac059bbffafeb7cd003dfa75e2964f6274 100644 --- a/exts/devmaster/src/bin/devctl/main.rs +++ b/exts/devmaster/src/bin/devctl/main.rs @@ -16,7 +16,7 @@ mod subcmds; use clap::Parser; use libdevmaster::framework::control_manager::CONTROL_MANAGER_LISTEN_ADDR; -use log::logger::init_log_to_console_syslog; +use log::init_log_to_console_syslog; use log::Level; use std::{io::Write, os::unix::net::UnixStream}; use subcmds::devctl_hwdb::subcommand_hwdb; diff --git a/exts/devmaster/src/bin/tools/ata_id/main.rs b/exts/devmaster/src/bin/tools/ata_id/main.rs index 10d14aab3fe31ef0f73b9c04db77b4e4748d30ca..f6840d74c2ecb6457d1dec6f4edb23197ed95824 100644 --- a/exts/devmaster/src/bin/tools/ata_id/main.rs +++ b/exts/devmaster/src/bin/tools/ata_id/main.rs @@ -17,7 +17,6 @@ use basic::IN_SET; use clap::Parser; use libdevmaster::utils::commons::{encode_devnode_name, replace_chars, replace_whitespace}; -use log::logger; use nix::{ errno::Errno, fcntl::{open, OFlag}, @@ -347,7 +346,7 @@ fn main() { let args = Args::parse(); - logger::init_log_to_console_syslog("ata_id", log::Level::Info); + log::init_log_to_console_syslog("ata_id", log::Level::Info); let mut id: hd_driveid = unsafe { mem::zeroed() }; let mut identify = IdentifyUnion { diff --git a/exts/devmaster/src/lib/builtin/blkid.rs b/exts/devmaster/src/lib/builtin/blkid.rs index 8b0ce16ae7c53f7e28cec0e8e7b7a308fe78ba86..6787f429b7a8fec50ec76ddd73cc59d323ce15e5 100644 --- a/exts/devmaster/src/lib/builtin/blkid.rs +++ b/exts/devmaster/src/lib/builtin/blkid.rs @@ -499,13 +499,12 @@ impl Builtin for Blkid { mod test { use super::*; use device::Device; - use log::logger; use std::path; #[test] #[ignore] fn test_builtin_blkid() { - logger::init_log( + log::init_log( "test_builtin_blkid", log::Level::Debug, vec!["console"], diff --git a/exts/devmaster/src/lib/builtin/input_id.rs b/exts/devmaster/src/lib/builtin/input_id.rs index f0126eb74aab73f31de43c80d52dfeb51c8d9ad5..77313f43266f056aab069ee728348e4197f26317 100644 --- a/exts/devmaster/src/lib/builtin/input_id.rs +++ b/exts/devmaster/src/lib/builtin/input_id.rs @@ -741,11 +741,10 @@ mod tests { use super::InputId; use crate::{builtin::Builtin, rules::exec_unit::ExecuteUnit}; use device::device_enumerator::DeviceEnumerator; - use log::logger; #[test] fn test_builtin_input_id() { - logger::init_log_to_console_syslog("test_builtin_input_id", log::Level::Debug); + log::init_log_to_console_syslog("test_builtin_input_id", log::Level::Debug); let mut enumerator = DeviceEnumerator::new(); diff --git a/exts/devmaster/src/lib/framework/devmaster.rs b/exts/devmaster/src/lib/framework/devmaster.rs index c8d2b0c30d1d0a42011ee4dc4c6069c1ef9538cb..370f4e8412fd97362396649858b1c3a0cbe2737e 100644 --- a/exts/devmaster/src/lib/framework/devmaster.rs +++ b/exts/devmaster/src/lib/framework/devmaster.rs @@ -15,7 +15,7 @@ use crate::{config::*, error::*, framework::*, rules::*}; use event::*; -use log::logger::init_log; +use log::init_log; use std::{ cell::RefCell, fs::create_dir_all, diff --git a/exts/devmaster/src/lib/rules/rules_load.rs b/exts/devmaster/src/lib/rules/rules_load.rs index e487de4d0ad0227770bc3e8c08c1a76d32a11314..5ce7cb29a2cfba9edcb016b7ce4ab0fa33694911 100644 --- a/exts/devmaster/src/lib/rules/rules_load.rs +++ b/exts/devmaster/src/lib/rules/rules_load.rs @@ -1618,7 +1618,7 @@ impl RuleToken { #[cfg(test)] mod tests { use crate::config::*; - use log::logger::init_log; + use log::init_log; use log::Level; use super::*; diff --git a/exts/devmaster/src/lib/utils/spawn.rs b/exts/devmaster/src/lib/utils/spawn.rs index 12508985adc38313bda2724e5f48cae2f0c0f962..b6f65040489438338c43a07aaaee9cbd399e0a4b 100644 --- a/exts/devmaster/src/lib/utils/spawn.rs +++ b/exts/devmaster/src/lib/utils/spawn.rs @@ -135,7 +135,7 @@ mod tests { use super::*; use crate::rules::exec_unit::ExecuteUnit; use device::Device; - use log::logger::init_log; + use log::init_log; use log::Level; use std::cell::RefCell; use std::rc::Rc; diff --git a/exts/fstab/src/main.rs b/exts/fstab/src/main.rs index f91e4421c2098fccec8e4c9ea6050b240a92d446..4a8e06604800e2a298001823760c85e093daaddd 100644 --- a/exts/fstab/src/main.rs +++ b/exts/fstab/src/main.rs @@ -143,7 +143,7 @@ fn watch_devices(fstab_items: &[FSTabItem]) -> (Inotify, HashSet) { } fn main() { - log::logger::init_log_to_console("fstab", log::Level::Info); + log::init_log_to_console("fstab", log::Level::Info); let mut fstab_items: Vec = fstab_item::parse(FSTAB_PATH); // inotify: monitor, watch_set: what we care. diff --git a/exts/hostname_setup/src/main.rs b/exts/hostname_setup/src/main.rs index a29054d24d6b1267dfc20dae1ed2460cf25c57b9..80693a4c1b12de6f327ed2d30d7669bdf25974e8 100644 --- a/exts/hostname_setup/src/main.rs +++ b/exts/hostname_setup/src/main.rs @@ -179,7 +179,7 @@ impl Default for Hostname { } fn main() { - log::logger::init_log_to_console_syslog("hostname-setup", log::Level::Info); + log::init_log_to_console_syslog("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/hwdb/src/main.rs b/exts/hwdb/src/main.rs index ee2c2c3542a010e4f01e36beba9e599583ab4152..7b192a27cb6cbe218788dded7bffad75b38a4b2d 100644 --- a/exts/hwdb/src/main.rs +++ b/exts/hwdb/src/main.rs @@ -14,7 +14,7 @@ use clap::Parser; use hwdb::HwdbUtil; -use log::{logger, Level}; +use log::Level; type Result = std::result::Result; @@ -81,7 +81,7 @@ fn update( } fn main() -> Result<()> { - logger::init_log_to_console("sysmaster-hwdb", Level::Debug); + log::init_log_to_console("sysmaster-hwdb", Level::Debug); let args = Args::parse(); match args.subcmd { SubCmd::Query { modalias, root } => query(modalias, root), diff --git a/exts/random_seed/src/main.rs b/exts/random_seed/src/main.rs index 01b37faed20e2a487d840bba21385bc5c50dfdf8..21738a7b84977043c4f6d4d45e4e269fe1ac5120 100644 --- a/exts/random_seed/src/main.rs +++ b/exts/random_seed/src/main.rs @@ -19,7 +19,7 @@ mod random_seed; use crate::random_seed::run; fn main() { - log::logger::init_log_to_console_syslog("random-seed", log::Level::Debug); + log::init_log_to_console_syslog("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/init/config.rs b/init/config.rs index b22a483b8de9fb947966d241cae2355b47b614e9..c5e0c89c613e6050f8da9bc2daf708f83a4c088f 100644 --- a/init/config.rs +++ b/init/config.rs @@ -1,3 +1,15 @@ +// 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::io::Result; use std::{fs::File, io::Read, path::Path}; diff --git a/init/logger.rs b/init/logger.rs deleted file mode 100644 index 3ee20a22b960d9d7e12754521e1576bad6854c87..0000000000000000000000000000000000000000 --- a/init/logger.rs +++ /dev/null @@ -1,18 +0,0 @@ -use kernlog::KernelLog; - -pub struct Logger; - -impl Logger { - pub fn init(loglevel: log::LevelFilter) { - match KernelLog::with_level(loglevel) { - Ok(klog) => { - log::set_boxed_logger(Box::new(klog)).expect("Failed to set logger!"); - log::set_max_level(loglevel); - } - Err(e) => { - env_logger::builder().filter_level(loglevel).init(); - log::error!("Unsupported log into /dev/kmsg: {}, log into console!", e); - } - } - } -} diff --git a/init/main.rs b/init/main.rs index 04aca2d469fc90cb222ac4f3522c24c1a10e85b2..c54fedeff4f1a581266820ab8901323411bfd659 100644 --- a/init/main.rs +++ b/init/main.rs @@ -12,10 +12,8 @@ //! The init daemon mod config; -mod logger; mod runtime; -use logger::Logger; use nix::sys::signal; use nix::sys::signal::SaFlags; use nix::sys::signal::SigAction; @@ -109,7 +107,7 @@ fn shutdown_init() { } fn main() -> std::io::Result<()> { - Logger::init(log::LevelFilter::Info); + log::init_log_to_kmsg("sysmaster-init", log::Level::Info); prepare_init(); diff --git a/init/runtime.rs b/init/runtime.rs index 680402bd685ce4db6fad0658001a1e914986d0e0..217d76abdcc7e8c4e9af82e46bb6f9b16299ee58 100644 --- a/init/runtime.rs +++ b/init/runtime.rs @@ -1,3 +1,15 @@ +// 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 crate::config::Config; use mio::{unix::SourceFd, Events, Interest, Poll, Token}; use nix::sys::{ @@ -27,6 +39,13 @@ pub const INIT_SOCK: &str = "/run/sysmaster/init.sock"; #[cfg(test)] pub const INIT_SOCK: &str = "init.sock"; +pub static SIGNALS: [Signal; 4] = [ + Signal::SIGINT, + Signal::SIGTERM, + Signal::SIGCHLD, + Signal::SIGHUP, +]; + const ALLFD_TOKEN: Token = Token(0); const TIMERFD_TOKEN: Token = Token(1); const SIGNALFD_TOKEN: Token = Token(2); @@ -99,13 +118,8 @@ impl Runtime { // add signal let mut mask = SigSet::empty(); - for sig in [ - Signal::SIGINT, - Signal::SIGTERM, - Signal::SIGCHLD, - Signal::SIGHUP, - ] { - mask.add(sig); + for sig in SIGNALS.iter() { + mask.add(*sig); } mask.thread_set_mask()?; let signalfd = SignalFd::with_flags(&mask, SfdFlags::SFD_CLOEXEC | SfdFlags::SFD_NONBLOCK)?; diff --git a/libs/cmdproto/examples/signal.rs b/libs/cmdproto/examples/signal.rs index 98ad6305376a83d649962785712bf621940cb367..459aa4962233d1f9c250592bf3d7f97a5e295da5 100644 --- a/libs/cmdproto/examples/signal.rs +++ b/libs/cmdproto/examples/signal.rs @@ -13,7 +13,7 @@ //! test unit signal fn main() { - /*logger::init_log_to_console("test_unit_signal", 4); + /*log::init_log_to_console("test_unit_signal", 4); let out_dir = env::var("LD_LIBRARY_PATH"); let _tmp_str = out_dir.unwrap(); let _tmp_str_v = _tmp_str.split(':').collect::>()[0]; diff --git a/libs/log/Cargo.toml b/libs/log/Cargo.toml index 8f5b0a0ad1d1e1f2066c4604a23171f7bea89f98..16f090fadd20e5328a824d8c4318e974a85de3c4 100644 --- a/libs/log/Cargo.toml +++ b/libs/log/Cargo.toml @@ -8,4 +8,3 @@ edition = "2021" [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 index 17f05dee37026fa45f8188261c9271d1d91fa7e9..13f42aed8e2aac8c92cd5dc5ad504bba1cf7531d 100644 --- a/libs/log/src/inner.rs +++ b/libs/log/src/inner.rs @@ -12,19 +12,17 @@ //! use std::{ - cmp, fmt, + fmt, io::{Error, ErrorKind}, - mem, ops::Deref, - str::FromStr, sync::{ - atomic::{AtomicU8, AtomicUsize, Ordering}, + atomic::{AtomicUsize, Ordering}, RwLock, }, }; use crate::logger::ReInit; -use log::{LevelFilter, Record}; +use log::Record; static mut LOGGER_LOCK: Option> = None; @@ -34,132 +32,6 @@ const UNINITIALIZED: usize = 0; const INITIALIZING: usize = 1; const INITIALIZED: usize = 2; -/// -#[repr(u8)] -#[derive(Copy, Eq, Debug)] -pub enum Level { - /// - Error = 0, - /// - Warn = 1, - /// - Info = 2, - /// - Debug = 3, - /// - Trace = 4, -} - -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)) @@ -251,26 +123,12 @@ macro_rules! __log_line { }; } -static MAX_LOG_LEVEL_FILTER: AtomicU8 = AtomicU8::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 u8, 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() { + if lvl <= $crate::max_level() { $crate::inner::__private_api_log( __log_format_args!($($arg)+), lvl, @@ -285,10 +143,10 @@ macro_rules! log { #[macro_export(local_inner_macros)] macro_rules! error { (target: $target:expr, $($arg:tt)+) => ( - log!(target: $target, $crate::log::Level::Error, $($arg)+) + log!(target: $target, $crate::Level::Error, $($arg)+) ); ($($arg:tt)+) => ( - log!($crate::inner::Level::Error, $($arg)+) + log!($crate::Level::Error, $($arg)+) ) } @@ -296,10 +154,10 @@ macro_rules! error { #[macro_export(local_inner_macros)] macro_rules! warn { (target: $target:expr, $($arg:tt)+) => ( - log!(target: $target, $crate::log::Level::Warn, $($arg)+) + log!(target: $target, $crate::Level::Warn, $($arg)+) ); ($($arg:tt)+) => ( - log!($crate::inner::Level::Warn, $($arg)+) + log!($crate::Level::Warn, $($arg)+) ) } @@ -307,10 +165,10 @@ macro_rules! warn { #[macro_export(local_inner_macros)] macro_rules! info { (target: $target:expr, $($arg:tt)+) => ( - log!(target: $target, $crate::log::Level::Info, $($arg)+) + log!(target: $target, $crate::Level::Info, $($arg)+) ); ($($arg:tt)+) => ( - log!($crate::inner::Level::Info, $($arg)+) + log!($crate::Level::Info, $($arg)+) ) } @@ -318,10 +176,10 @@ macro_rules! info { #[macro_export(local_inner_macros)] macro_rules! debug { (target: $target:expr, $($arg:tt)+) => ( - log!(target: $target, $crate::log::Level::Debug, $($arg)+) + log!(target: $target, $crate::Level::Debug, $($arg)+) ); ($($arg:tt)+) => ( - log!($crate::inner::Level::Debug, $($arg)+) + log!($crate::Level::Debug, $($arg)+) ) } @@ -329,10 +187,10 @@ macro_rules! debug { #[macro_export(local_inner_macros)] macro_rules! trace { (target: $target:expr, $($arg:tt)+) => ( - log!(target: $target, $crate::logger::Level::Trace, $($arg)+) + log!(target: $target, $crate::Level::Trace, $($arg)+) ); ($($arg:tt)+) => ( - log!($crate::inner::Level::Trace, $($arg)+) + log!($crate::Level::Trace, $($arg)+) ) } @@ -340,7 +198,7 @@ macro_rules! trace { /* Private, shouldn't be used out of this file. */ pub fn __private_api_log( args: fmt::Arguments, - level: Level, + level: crate::Level, &(target, module_path, file, line): &(&str, &'static str, &'static str, u32), ) { if STATE.load(Ordering::SeqCst) != INITIALIZED { @@ -352,7 +210,7 @@ pub fn __private_api_log( v.read().unwrap().log( &Record::builder() .args(args) - .level(level.to_ori_level()) + .level(level) .target(target) .module_path_static(Some(module_path)) .file_static(Some(file)) diff --git a/libs/log/src/lib.rs b/libs/log/src/lib.rs index 411260fa75fb73de2a7f6d33c0fccef1d93a85de..62eea3fb9e9ddf5e1e63b1d680b60cb02fa95fdd 100644 --- a/libs/log/src/lib.rs +++ b/libs/log/src/lib.rs @@ -14,7 +14,87 @@ pub mod inner; pub mod logger; -/// -pub use inner::max_level; -/// -pub use inner::Level; +/// reexport log::Log +pub use log::max_level; +pub use log::set_max_level; +pub use log::Log; +pub use log::{Level, LevelFilter}; +pub use log::{Metadata, MetadataBuilder}; +pub use log::{Record, RecordBuilder}; + +pub use logger::get_open_when_needed; +pub use logger::set_open_when_needed; +/// Reinit the logger based on the previous configuration +pub fn reinit() { + inner::reinit(); +} + +pub use logger::init_log; +/// Initialize console and syslog logger. +pub fn init_log_to_console(name: &str, level: crate::Level) { + init_log(name, level, vec!["console"], "", 0, 0, false); +} + +/// Initialize console and syslog logger. +pub fn init_log_to_console_syslog(name: &str, level: crate::Level) { + init_log(name, level, vec!["console", "syslog"], "", 0, 0, false); +} + +/// Initialize console and syslog logger. +pub fn init_log_to_file( + name: &str, + level: crate::Level, + file_path: &str, + file_size: u32, + file_number: u32, + open_when_needed: bool, +) { + init_log( + name, + level, + vec!["file"], + file_path, + file_size, + file_number, + open_when_needed, + ); +} + +/// Initialize kmsg logger. +pub fn init_log_to_kmsg(name: &str, level: crate::Level) { + init_log(name, level, vec!["kmsg"], "", 0, 0, false); +} + +/// Initialize kmsg and console logger. +pub fn init_log_to_kmsg_console(name: &str, level: crate::Level) { + init_log(name, level, vec!["kmsg", "console"], "", 0, 0, false); +} + +#[cfg(test)] +mod tests { + use crate::{init_log, reinit, Level}; + + #[test] + fn test_init_log_to_console() { + init_log("test", Level::Debug, vec!["console"], "", 0, 0, false); + crate::error!("hello, error!"); + crate::set_max_level(Level::Info.to_level_filter()); + crate::info!("hello, info!"); /* Won't print */ + crate::debug!("hello debug!"); + init_log("test", Level::Debug, vec!["syslog"], "", 0, 0, false); + crate::debug!("hello debug2!"); /* Only print in the syslog */ + reinit(); + crate::debug!("hello debug3!"); /* Only print in the syslog */ + + init_log( + "test", + Level::Debug, + vec!["kmsg", "console"], + "", + 0, + 0, + false, + ); + crate::info!("hello, kmsg!"); + } +} diff --git a/libs/log/src/logger.rs b/libs/log/src/logger.rs index 932c1b54df823e2a14cc0a0668b6e30971141f10..11d8d224a744eec19a80520e73e1df7daf422db3 100644 --- a/libs/log/src/logger.rs +++ b/libs/log/src/logger.rs @@ -22,15 +22,11 @@ use std::{ }, path::{Path, PathBuf}, sync::{ - atomic::{AtomicBool, AtomicU8, Ordering}, + atomic::{AtomicBool, Ordering}, Mutex, }, }; -pub use crate::inner::Level; -pub use crate::inner::{debug, error, info, trace, warn}; - -static mut LOG_LEVEL: AtomicU8 = AtomicU8::new(4); static mut OPEN_WHEN_NEEDED: AtomicBool = AtomicBool::new(false); /// Logger instance should implement `ReInit` too. @@ -528,6 +524,61 @@ impl FileLogger { } } +struct KmsgLogger { + kmsg: Mutex, +} + +impl KmsgLogger { + pub fn new() -> Result { + Ok(KmsgLogger { + kmsg: Mutex::new(OpenOptions::new().write(true).open("/dev/kmsg")?), + }) + } +} + +impl ReInit for KmsgLogger { + fn reinit(&self) {} +} + +impl log::Log for KmsgLogger { + fn enabled(&self, _: &log::Metadata) -> bool { + true + } + + fn log(&self, record: &log::Record) { + if record.level() > crate::max_level() { + return; + } + + let level: u8 = match record.level() { + crate::Level::Error => 3, + crate::Level::Warn => 4, + crate::Level::Info => 5, + crate::Level::Debug => 6, + crate::Level::Trace => 7, + }; + + let mut buf = Vec::new(); + if writeln!( + buf, + "<{}>{}[{}]: {}", + level, + record.target(), + unsafe { ::libc::getpid() }, + record.args() + ) + .is_ok() + { + if let Ok(mut kmsg) = self.kmsg.lock() { + let _ = kmsg.write(&buf); + let _ = kmsg.flush(); + } + } + } + + fn flush(&self) {} +} + /// Collect different kinds of loggers together that implements `ReInit` trait. /// /// Include: SysLogger, ConsoleLogger, FileLogger @@ -573,6 +624,18 @@ impl CombinedLogger { } } +/// Set the `OPEN_WHEN_NEEDED` flag. +pub fn set_open_when_needed(val: bool) { + unsafe { + OPEN_WHEN_NEEDED.store(val, Ordering::Release); + } +} + +/// Get the `OPEN_WHEN_NEEDED` flag. +pub fn get_open_when_needed() -> bool { + unsafe { OPEN_WHEN_NEEDED.load(Ordering::Acquire) } +} + /// Initialize the global static logger instance. /// Available log `targets` include `file`, `syslog`, `console`. /// Arguments of `file_*` and `open_when_needed` only take effect on `file` target. @@ -590,21 +653,14 @@ impl CombinedLogger { /// * `open_when_needed` - If true, open the logger file just when logging messages. pub fn init_log( name: &str, - level: Level, + level: crate::Level, targets: Vec<&str>, file_path: &str, file_size: u32, file_number: u32, open_when_needed: bool, ) { - let level_num: u8 = match level { - Level::Error => 1, - Level::Warn => 2, - Level::Info => 3, - Level::Debug => 4, - Level::Trace => 5, - }; - crate::inner::set_max_level(level); + crate::set_max_level(level.to_level_filter()); let mut combined_loggers = CombinedLogger::new(); @@ -622,7 +678,7 @@ pub fn init_log( ) { Ok(logger) => Box::new(logger) as Box, Err(e) => { - eprint!( + eprintln!( "{} failed to create '{}' file logger: {:?}", name, file_path, e ); @@ -630,6 +686,13 @@ pub fn init_log( } } } + "kmsg" => match KmsgLogger::new() { + Ok(kmsg) => Box::new(kmsg) as Box, + Err(e) => { + eprintln!("Failed to open /dev/kmsg: {:?}", e); + continue; + } + }, _ => { eprintln!("{}: log target '{}' is strange, ignoring.", name, target); continue; @@ -648,83 +711,5 @@ pub fn init_log( return; } - set_log_level(level_num); set_open_when_needed(open_when_needed); } - -/// Reinit the logger based on the previous configuration -pub fn reinit() { - super::inner::reinit(); -} - -/// Initialize console and syslog logger. -pub fn init_log_to_console(name: &str, level: Level) { - init_log(name, level, vec!["console"], "", 0, 0, false); -} - -/// Initialize console and syslog logger. -pub fn init_log_to_console_syslog(name: &str, level: Level) { - init_log(name, level, vec!["console", "syslog"], "", 0, 0, false); -} - -/// Initialize console and syslog logger. -pub fn init_log_to_file( - name: &str, - level: Level, - file_path: &str, - file_size: u32, - file_number: u32, - open_when_needed: bool, -) { - init_log( - name, - level, - vec!["file"], - file_path, - file_size, - file_number, - open_when_needed, - ); -} - -/// Set the `OPEN_WHEN_NEEDED` flag. -pub fn set_open_when_needed(val: bool) { - unsafe { - OPEN_WHEN_NEEDED.store(val, Ordering::Release); - } -} - -/// Get the `OPEN_WHEN_NEEDED` flag. -pub fn get_open_when_needed() -> bool { - unsafe { OPEN_WHEN_NEEDED.load(Ordering::Acquire) } -} - -/// Set the `LOG_LEVEL`. -pub fn set_log_level(level: u8) { - unsafe { - LOG_LEVEL.store(level, Ordering::Release); - } -} - -/// Get the `LOG_LEVEL`. -pub fn get_log_level() -> u8 { - unsafe { LOG_LEVEL.load(Ordering::Acquire) } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_init_log_to_console() { - init_log("test", Level::Debug, vec!["console"], "", 0, 0, false); - 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, vec!["syslog"], "", 0, 0, false); - crate::debug!("hello debug2!"); /* Only print in the syslog */ - reinit(); - crate::debug!("hello debug3!"); /* Only print in the syslog */ - } -}