From 337706c49902dfaf761ba222f326001a1cd61539 Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Fri, 10 Mar 2023 15:53:03 +0800 Subject: [PATCH] feat: new log format of rust modules --- include/utils/assets.h | 2 +- src/Cargo.lock | 25 +++++++++++++++++++++++-- src/assets/Cargo.toml | 1 + src/assets/src/fetch.rs | 6 +++--- src/assets/src/ffi.rs | 23 +++++++++++++++++++++-- src/cleardns.c | 4 ++-- 6 files changed, 51 insertions(+), 10 deletions(-) diff --git a/include/utils/assets.h b/include/utils/assets.h index 51279c1..4355f40 100644 --- a/include/utils/assets.h +++ b/include/utils/assets.h @@ -23,7 +23,7 @@ uint32_t assets_size(asset **asset_list); void assets_append(asset ***asset_list, asset *res); /// Rust assets interface -void assets_log_init(uint8_t verbose); +void assets_log_init(uint8_t verbose, const char *prefix); uint8_t asset_update(const char *file, char *const *sources, const char *assets_dir); #endif diff --git a/src/Cargo.lock b/src/Cargo.lock index fc1af73..e1937fd 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -51,6 +51,7 @@ checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" name = "assets" version = "0.1.0" dependencies = [ + "chrono", "env_logger", "log", "reqwest", @@ -154,8 +155,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" dependencies = [ "iana-time-zone", + "js-sys", "num-integer", "num-traits", + "time", + "wasm-bindgen", "winapi", ] @@ -428,7 +432,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -733,7 +737,7 @@ checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.45.0", ] @@ -1255,6 +1259,17 @@ dependencies = [ "syn", ] +[[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" @@ -1485,6 +1500,12 @@ dependencies = [ "try-lock", ] +[[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/src/assets/Cargo.toml b/src/assets/Cargo.toml index 839a81f..c7b9a6e 100644 --- a/src/assets/Cargo.toml +++ b/src/assets/Cargo.toml @@ -9,6 +9,7 @@ crate-type = ["staticlib"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +chrono = "0.4.23" env_logger = "0.10.0" log = "0.4.17" reqwest = { version = "0.11.14", features = ["deflate", "gzip", "brotli"] } diff --git a/src/assets/src/fetch.rs b/src/assets/src/fetch.rs index 50bda38..ba319a9 100644 --- a/src/assets/src/fetch.rs +++ b/src/assets/src/fetch.rs @@ -41,14 +41,14 @@ async fn http_fetch(url: &str, timeout: u64) -> Result, String> { let client = ClientBuilder::new(reqwest::Client::new()) .with(RetryTransientMiddleware::new_with_policy(retry_policy)) .build(); - debug!("Start downloading `{}`", url); + info!("Start downloading `{}`", url); match client.get(url) .timeout(Duration::from_secs(timeout)) .send().await { Ok(response) => { match response.text().await { Ok(text) => { - info!("Remote file `{}` download success", url); + debug!("Remote file `{}` download success", url); Ok(asset_tidy(&text)) }, Err(err) => Err(format!("http content error: {}", err)) @@ -66,7 +66,7 @@ async fn local_fetch(path: &str) -> Result, String> { if let Err(err) = file.read_to_string(&mut text) { return Err(format!("file `{}` read failed: {}", path, err)); }; - info!("Local file `{}` read success", path); + debug!("Local file `{}` read success", path); Ok(asset_tidy(&text)) }, Err(err) => Err(format!("file `{}` open failed: {}", path, err)), diff --git a/src/assets/src/ffi.rs b/src/assets/src/ffi.rs index 6cb3663..ac41a44 100644 --- a/src/assets/src/ffi.rs +++ b/src/assets/src/ffi.rs @@ -31,13 +31,32 @@ unsafe fn load_c_string_list(ptr: *const *const c_char) -> Vec { /// Initialize the rust module log, enable trace level log when verbose is not `0`. #[no_mangle] -pub unsafe extern "C" fn assets_log_init(verbose: u8) { +pub unsafe extern "C" fn assets_log_init(verbose: u8, prefix: *const c_char) { if verbose == FALSE { // bool value `FALSE` set_var("RUST_LOG", "info"); } else { set_var("RUST_LOG", "trace"); } - env_logger::init(); + let log_prefix = load_c_string(prefix); + env_logger::builder() + .target(env_logger::Target::Stderr) + .format(move |buf, record| { + let prefix = format!( + "\x1b[36m[{}]\x1b[0m \x1b[90m{}\x1b[0m \x1b[35m[{}]\x1b[0m", + log_prefix, + chrono::Local::now().format("%Y-%m-%d %H:%M:%S%.3f").to_string(), + record.module_path().unwrap() + ); + let level = format!("{}[{}]\x1b[0m", match record.level() { + log::Level::Trace => "\x1b[39m", + log::Level::Debug => "\x1b[36m", + log::Level::Info => "\x1b[32m", + log::Level::Warn => "\x1b[33m", + log::Level::Error => "\x1b[31m", + }, record.level()); + write!(buf, "{} {} {:?}\n", prefix, level, record.args()) + }) + .init(); } /// Update the specified resource file, return `0` on failure. diff --git a/src/cleardns.c b/src/cleardns.c index 492c8fc..75b1b93 100644 --- a/src/cleardns.c +++ b/src/cleardns.c @@ -66,9 +66,9 @@ void init(int argc, char *argv[]) { // return config file void cleardns() { // cleardns service if (settings.verbose || settings.debug) { LOG_LEVEL = LOG_DEBUG; // enable debug log level - assets_log_init(TRUE); + assets_log_init(TRUE, LOG_PREFIX); } else { - assets_log_init(FALSE); + assets_log_init(FALSE, LOG_PREFIX); } create_folder(EXPOSE_DIR); create_folder(WORK_DIR);