summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2025-12-01 22:21:57 +0800
committer魏曹先生 <1992414357@qq.com>2025-12-01 22:21:57 +0800
commit899e109f6ef3a32c25f75aec5690bb800c3466ac (patch)
tree98eb5bae5a40d41f891ffa67f92561c91df14b60
parentf28a6f1f3460252a7e7fe4b8e4a1ef150e587f38 (diff)
Add --show-log flag and refactor vault setup
- Add `--show-log` flag to override profile logger setting - Add validation for conflicting `--no-log` and `--show-log` flags - Refactor `Vault::setup_vault` to accept vault name parameter - Update logger initialization to respect configured log level - Add new dependencies: `whoami`, `redox_syscall`, `wasite`, `web-sys` - Add error message for conflicting log flags in locales
-rw-r--r--Cargo.lock29
-rw-r--r--locales/help_docs/en.yml12
-rw-r--r--locales/help_docs/zh-CN.yml12
-rw-r--r--src/bin/jvv.rs76
-rw-r--r--src/utils/logger.rs16
5 files changed, 94 insertions, 51 deletions
diff --git a/Cargo.lock b/Cargo.lock
index a66de49..aa9b047 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1003,6 +1003,7 @@ checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
dependencies = [
"bitflags 2.9.4",
"libc",
+ "redox_syscall",
]
[[package]]
@@ -2021,6 +2022,7 @@ dependencies = [
"uuid",
"vcs_docs",
"walkdir",
+ "whoami",
"winapi",
]
@@ -2069,6 +2071,12 @@ dependencies = [
]
[[package]]
+name = "wasite"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
+
+[[package]]
name = "wasm-bindgen"
version = "0.2.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2128,6 +2136,27 @@ dependencies = [
]
[[package]]
+name = "web-sys"
+version = "0.3.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "whoami"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d"
+dependencies = [
+ "libredox",
+ "wasite",
+ "web-sys",
+]
+
+[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/locales/help_docs/en.yml b/locales/help_docs/en.yml
index 25c2f7f..08bd95d 100644
--- a/locales/help_docs/en.yml
+++ b/locales/help_docs/en.yml
@@ -117,6 +117,18 @@ jvv:
Server forced to close due to error!
Error message: %{error}
+ wtf_show_log_and_no_log: |
+ You cannot both show and hide log output at the same time!
+
+ "
+ This reminds me of the old saying: 'You can't have your cake and eat it too.'
+ Or perhaps the classic logical puzzle: 'This statement is false.'
+ "
+
+ Your command is a paradox: show the logs, and do not show the logs. Which contradictory order should I follow?
+
+ **Tip**: Use `jvv listen --no-log` or `jvv listen --show-log` to override the default Logger setting.
+
success:
here:
info: |
diff --git a/locales/help_docs/zh-CN.yml b/locales/help_docs/zh-CN.yml
index e6bdfc7..82ae6af 100644
--- a/locales/help_docs/zh-CN.yml
+++ b/locales/help_docs/zh-CN.yml
@@ -114,6 +114,18 @@ jvv:
服务端被错误强制关闭!
错误信息:%{error}
+ wtf_show_log_and_no_log: |
+ 您无法同时选择显示和不显示输出信息!
+
+ “
+ 这让我想起那个古老的寓言:一位卖矛和盾的商人,先是夸口他的盾‘任何矛都刺不穿’,
+ 接着又宣称他的矛 ‘能刺穿任何盾’。当被问到 ’用你的矛刺你的盾会怎样’ 时,他哑口无言。
+ ”
+
+ 您的指令就像这则故事,既要显示日志,又要不显示日志。我该遵循哪个矛盾的命令呢?
+
+ **提示**:使用 `jvv listen --no-log` 或 `jvv listen --show-log` 覆盖默认 Logger 设置运行
+
success:
here:
info: |
diff --git a/src/bin/jvv.rs b/src/bin/jvv.rs
index db72a53..b9a1d74 100644
--- a/src/bin/jvv.rs
+++ b/src/bin/jvv.rs
@@ -174,10 +174,14 @@ struct ListenArgs {
#[arg(short, long)]
help: bool,
- /// Disable logging
+ /// Disable logging (Override profile)
#[arg(short, long)]
no_log: bool,
+ /// Show logging (Override profile)
+ #[arg(short, long)]
+ show_log: bool,
+
/// Custom port
#[arg(short, long)]
port: Option<u16>,
@@ -465,22 +469,7 @@ async fn jvv_init(_args: InitVaultArgs) {
};
let vault_name = pascal_case!(vault_name);
- if let Err(err) = Vault::setup_vault(current_dir.clone()).await {
- eprintln!("{}", t!("jvv.fail.jvcs", err = err.to_string()));
- return;
- }
-
- // Read vault cfg
- let mut vault_cfg = match VaultConfig::read().await {
- Ok(cfg) => cfg,
- Err(err) => {
- eprintln!("{}", t!("jvv.fail.jvcs", err = err.to_string()));
- return;
- }
- };
-
- vault_cfg.change_name(vault_name);
- if let Err(err) = VaultConfig::write(&vault_cfg).await {
+ if let Err(err) = Vault::setup_vault(current_dir.clone(), vault_name).await {
eprintln!("{}", t!("jvv.fail.jvcs", err = err.to_string()));
return;
}
@@ -523,34 +512,7 @@ async fn jvv_create(args: CreateVaultArgs) {
// Setup vault
let vault_name = pascal_case!(args.vault_name);
- if let Err(err) = Vault::setup_vault(target_dir.clone()).await {
- eprintln!("{}", t!("jvv.fail.jvcs", err = err.to_string()));
- return;
- }
-
- // Enter target_dir
- if set_current_dir(&target_dir).is_err() {
- eprintln!(
- "{}",
- t!(
- "jvv.fail.std.set_current_dir",
- dir = target_dir.to_string_lossy()
- )
- );
- return;
- }
-
- // Read vault cfg
- let mut vault_cfg = match VaultConfig::read().await {
- Ok(cfg) => cfg,
- Err(err) => {
- eprintln!("{}", t!("jvv.fail.jvcs", err = err.to_string()));
- return;
- }
- };
-
- vault_cfg.change_name(vault_name);
- if let Err(err) = VaultConfig::write(&vault_cfg).await {
+ if let Err(err) = Vault::setup_vault(target_dir.clone(), vault_name).await {
eprintln!("{}", t!("jvv.fail.jvcs", err = err.to_string()));
return;
}
@@ -652,7 +614,24 @@ async fn jvv_service_listen(args: ListenArgs) {
return;
};
- if !args.no_log {
+ let Ok(vault_cfg) = VaultConfig::read().await else {
+ eprintln!("{}", t!("jvv.fail.here.cfg_not_found").trim());
+ return;
+ };
+
+ let show_logger = if args.no_log && !args.show_log {
+ false
+ } else if !args.no_log && args.show_log {
+ true
+ } else if !args.no_log && !args.show_log {
+ // Read profile
+ vault_cfg.server_config().is_logger_enabled()
+ } else {
+ eprintln!("{}", md(t!("jvv.fail.service.wtf_show_log_and_no_log")));
+ return;
+ };
+
+ if show_logger {
let logs_dir = current_vault.join("logs");
if let Err(_) = fs::create_dir_all(&logs_dir).await {
eprintln!(
@@ -666,7 +645,10 @@ async fn jvv_service_listen(args: ListenArgs) {
}
let now = chrono::Local::now();
let log_filename = format!("log_{}.txt", now.format("%Y.%m.%d-%H:%M:%S"));
- build_env_logger(logs_dir.join(log_filename));
+ build_env_logger(
+ logs_dir.join(log_filename),
+ vault_cfg.server_config().logger_level(),
+ );
info!(
"{}",
t!(
diff --git a/src/utils/logger.rs b/src/utils/logger.rs
index e1b9e65..5871094 100644
--- a/src/utils/logger.rs
+++ b/src/utils/logger.rs
@@ -2,10 +2,12 @@ use std::path::Path;
use colored::Colorize;
use env_logger::{Builder, Target};
-use just_enough_vcs::utils::string_proc::format_path::format_path;
+use just_enough_vcs::{
+ utils::string_proc::format_path::format_path, vcs::data::vault::config::LoggerLevel,
+};
use log::{Level, LevelFilter};
-pub fn build_env_logger(log_path: impl AsRef<Path>) {
+pub fn build_env_logger(log_path: impl AsRef<Path>, logger_level: LoggerLevel) {
use std::io::{self, Write};
struct MultiWriter<A, B> {
@@ -70,10 +72,16 @@ pub fn build_env_logger(log_path: impl AsRef<Path>) {
let log_file = std::fs::File::create(log_path).expect("Failed to create log file");
let combined_target = Target::Pipe(Box::new(MultiWriter::new(std::io::stdout(), log_file)));
+ let level = match logger_level {
+ LoggerLevel::Debug => LevelFilter::Debug,
+ LoggerLevel::Trace => LevelFilter::Trace,
+ LoggerLevel::Info => LevelFilter::Info,
+ };
+
builder
.format(log_format)
- .filter(None, LevelFilter::Info)
- .filter_module("just_enough_vcs", LevelFilter::Trace)
+ .filter(None, level.clone())
+ .filter_module("just_enough_vcs", level)
.target(combined_target)
.init();
}