diff --git a/Cargo.lock b/Cargo.lock index d3aad4f..c85adf9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -362,7 +362,7 @@ dependencies = [ [[package]] name = "biliup-cli" -version = "1.1.26" +version = "1.1.27" dependencies = [ "async-channel", "async-trait", @@ -3693,7 +3693,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stream-gears" -version = "1.1.26" +version = "1.1.27" dependencies = [ "async-channel", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index 09bc53a..c7e4b1f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ members = [ resolver = "3" [workspace.package] -version = "1.1.26" +version = "1.1.27" [workspace.dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/app/ui/plugins/developer.tsx b/app/ui/plugins/developer.tsx index d750932..0cfac82 100644 --- a/app/ui/plugins/developer.tsx +++ b/app/ui/plugins/developer.tsx @@ -40,7 +40,7 @@ const Developer: React.FC = () => { { alignSelf: 'stretch', padding: 0, }} - onChange={() => { + onChange={(value) => { formApi.setValue('LOGGING.root.handlers', ['console']) + formApi.setValue('LOGGING.loggers.biliup.handlers', ['file']) + formApi.setValue('LOGGING.loggers.biliup.level', value) }} showClear={true} > @@ -60,8 +62,8 @@ const Developer: React.FC = () => { CRITICAL { padding: 0, }} onChange={() => { - formApi.setValue('LOGGING.loggers.biliup.handlers', ['file']) }} showClear={true} > diff --git a/crates/biliup-cli/src/server/api/endpoints.rs b/crates/biliup-cli/src/server/api/endpoints.rs index ba894d2..43fb392 100644 --- a/crates/biliup-cli/src/server/api/endpoints.rs +++ b/crates/biliup-cli/src/server/api/endpoints.rs @@ -1,4 +1,3 @@ -use crate::UploadLine; use crate::server::common::upload::{build_studio, submit_to_bilibili, upload}; use crate::server::common::util::Recorder; use crate::server::config::Config; @@ -18,6 +17,7 @@ use crate::server::infrastructure::repositories::{ del_streamer, get_all_streamer, get_upload_config, }; use crate::server::infrastructure::service_register::ServiceRegister; +use crate::{LogHandle, UploadLine}; use axum::Json; use axum::extract::{Path, State}; use axum::http::StatusCode; @@ -35,6 +35,7 @@ use std::time::{Duration, UNIX_EPOCH}; use tokio::fs; use tokio::io::AsyncWriteExt; use tracing::info; +use tracing_subscriber::EnvFilter; pub async fn get_streamers_endpoint( State(pool): State, @@ -182,6 +183,7 @@ pub async fn get_configuration( pub async fn put_configuration( State(config): State>>, State(pool): State, + State(log_handle): State, Json(json_data): Json, ) -> Result, Response> { // 将 JSON 序列化为 TEXT 存库 @@ -260,7 +262,19 @@ pub async fn put_configuration( .change_context(AppError::Unknown) .map_err(report_to_response)?; *config.write().unwrap() = saved_config; - Ok(Json(config.read().unwrap().clone())) + let guard = config.read().unwrap(); + if let Some(loggers_level) = &guard.loggers_level { + let new_filter = EnvFilter::try_new(loggers_level) + .change_context(AppError::Custom(String::from("Invalid log level format"))) + .map_err(report_to_response)?; + + log_handle + .modify(|filter| *filter = new_filter) + .change_context(AppError::Unknown) + .map_err(report_to_response)?; + } + + Ok(Json(guard.clone())) } pub async fn get_streamer_info( diff --git a/crates/biliup-cli/src/server/config.rs b/crates/biliup-cli/src/server/config.rs index 660d0d1..3f4faeb 100644 --- a/crates/biliup-cli/src/server/config.rs +++ b/crates/biliup-cli/src/server/config.rs @@ -215,6 +215,8 @@ pub struct Config { /// 用户Cookie配置 #[serde(default)] pub user: Option, + + pub loggers_level: Option, } /// 主播配置结构体 diff --git a/crates/biliup-cli/src/server/infrastructure/service_register.rs b/crates/biliup-cli/src/server/infrastructure/service_register.rs index 4916735..ef341a4 100644 --- a/crates/biliup-cli/src/server/infrastructure/service_register.rs +++ b/crates/biliup-cli/src/server/infrastructure/service_register.rs @@ -25,8 +25,8 @@ pub struct ServiceRegister { pub config: Arc>, /// HTTP客户端 pub client: StatelessClient, - #[from_ref(skip)] - log_handle: LogHandle, + + pub log_handle: LogHandle, } /// 简单的服务容器,负责管理API端点通过axum扩展获取的各种服务