mirror of
https://github.com/lanyeeee/bilibili-video-downloader.git
synced 2026-09-08 17:16:52 +08:00
pref: 提高LogEvent的效率(移除发送前的反序列化步骤)
This commit is contained in:
+4
-12
@@ -1,23 +1,15 @@
|
||||
use std::collections::HashMap;
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use specta::Type;
|
||||
use tauri_specta::Event;
|
||||
|
||||
use crate::{
|
||||
downloader::{download_progress::DownloadProgress, download_task_state::DownloadTaskState},
|
||||
types::log_level::LogLevel,
|
||||
use crate::downloader::{
|
||||
download_progress::DownloadProgress, download_task_state::DownloadTaskState,
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, Type, Event)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct LogEvent {
|
||||
pub timestamp: String,
|
||||
pub level: LogLevel,
|
||||
pub fields: HashMap<String, serde_json::Value>,
|
||||
pub target: String,
|
||||
pub filename: String,
|
||||
#[serde(rename = "line_number")]
|
||||
pub line_number: i64,
|
||||
pub json_raw: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, Type, Event)]
|
||||
|
||||
@@ -33,6 +33,7 @@ use crate::{
|
||||
downloader::download_manager::DownloadManager,
|
||||
errors::install_custom_eyre_handler,
|
||||
events::{DownloadEvent, LogEvent},
|
||||
types::log_metadata::LogMetadata,
|
||||
};
|
||||
|
||||
fn generate_context() -> tauri::Context<Wry> {
|
||||
@@ -72,7 +73,8 @@ pub fn run() {
|
||||
get_skip_segments,
|
||||
get_available_media_formats,
|
||||
])
|
||||
.events(tauri_specta::collect_events![LogEvent, DownloadEvent]);
|
||||
.events(tauri_specta::collect_events![LogEvent, DownloadEvent])
|
||||
.typ::<LogMetadata>();
|
||||
|
||||
#[cfg(debug_assertions)]
|
||||
builder
|
||||
|
||||
+19
-14
@@ -13,7 +13,7 @@ use tracing_error::ErrorLayer;
|
||||
use tracing_subscriber::{
|
||||
Layer, Registry,
|
||||
filter::{FilterExt, Targets, filter_fn},
|
||||
fmt::{layer, time::LocalTime},
|
||||
fmt::{MakeWriter, layer, time::LocalTime},
|
||||
layer::SubscriberExt,
|
||||
registry::LookupSpan,
|
||||
util::SubscriberInitExt,
|
||||
@@ -30,17 +30,8 @@ struct LogEventWriter {
|
||||
|
||||
impl Write for LogEventWriter {
|
||||
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
|
||||
let log_string = String::from_utf8_lossy(buf);
|
||||
match serde_json::from_str::<LogEvent>(&log_string) {
|
||||
Ok(log_event) => {
|
||||
let _ = log_event.emit(&self.app);
|
||||
}
|
||||
Err(err) => {
|
||||
let log_string = log_string.to_string();
|
||||
let message = err.to_string();
|
||||
tracing::error!(log_string, message, "将日志字符串解析为LogEvent失败");
|
||||
}
|
||||
}
|
||||
let json_raw = String::from_utf8_lossy(buf).to_string();
|
||||
let _ = LogEvent { json_raw }.emit(&self.app);
|
||||
Ok(buf.len())
|
||||
}
|
||||
|
||||
@@ -49,6 +40,20 @@ impl Write for LogEventWriter {
|
||||
}
|
||||
}
|
||||
|
||||
struct LogEventWriterFactory {
|
||||
app: AppHandle,
|
||||
}
|
||||
|
||||
impl MakeWriter<'_> for LogEventWriterFactory {
|
||||
type Writer = LogEventWriter;
|
||||
|
||||
fn make_writer(&self) -> Self::Writer {
|
||||
LogEventWriter {
|
||||
app: self.app.clone(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static RELOAD_FN: OnceLock<Box<dyn Fn() -> eyre::Result<()> + Send + Sync>> = OnceLock::new();
|
||||
static GUARD: OnceLock<parking_lot::Mutex<Option<WorkerGuard>>> = OnceLock::new();
|
||||
|
||||
@@ -70,9 +75,9 @@ pub fn init(app: &AppHandle) -> eyre::Result<()> {
|
||||
.with_file(true)
|
||||
.with_line_number(true);
|
||||
// 发送到前端
|
||||
let log_event_writer = std::sync::Mutex::new(LogEventWriter { app: app.clone() });
|
||||
let log_event_factory = LogEventWriterFactory { app: app.clone() };
|
||||
let log_event_layer = layer()
|
||||
.with_writer(log_event_writer)
|
||||
.with_writer(log_event_factory)
|
||||
.with_timer(LocalTime::rfc_3339())
|
||||
.with_file(true)
|
||||
.with_line_number(true)
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use specta::Type;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Type)]
|
||||
pub enum LogLevel {
|
||||
#[serde(rename = "TRACE")]
|
||||
Trace,
|
||||
#[serde(rename = "DEBUG")]
|
||||
Debug,
|
||||
#[serde(rename = "INFO")]
|
||||
Info,
|
||||
#[serde(rename = "WARN")]
|
||||
Warn,
|
||||
#[serde(rename = "ERROR")]
|
||||
Error,
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
use std::collections::HashMap;
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use specta::Type;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Type)]
|
||||
pub struct LogMetadata {
|
||||
pub timestamp: String,
|
||||
pub level: LogLevel,
|
||||
pub fields: HashMap<String, serde_json::Value>,
|
||||
pub target: String,
|
||||
pub filename: String,
|
||||
pub line_number: i64,
|
||||
#[serde(default)]
|
||||
pub span: serde_json::Value,
|
||||
#[serde(default)]
|
||||
pub spans: Vec<LogSpan>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Type)]
|
||||
pub struct LogSpan {
|
||||
pub name: String,
|
||||
#[serde(flatten)]
|
||||
pub other_fields: HashMap<String, serde_json::Value>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Type)]
|
||||
pub enum LogLevel {
|
||||
#[serde(rename = "TRACE")]
|
||||
Trace,
|
||||
#[serde(rename = "DEBUG")]
|
||||
Debug,
|
||||
#[serde(rename = "INFO")]
|
||||
Info,
|
||||
#[serde(rename = "WARN")]
|
||||
Warn,
|
||||
#[serde(rename = "ERROR")]
|
||||
Error,
|
||||
}
|
||||
@@ -19,7 +19,7 @@ pub mod get_history_info_params;
|
||||
pub mod get_normal_info_params;
|
||||
pub mod get_user_video_info_params;
|
||||
pub mod history_info;
|
||||
pub mod log_level;
|
||||
pub mod log_metadata;
|
||||
pub mod normal_info;
|
||||
pub mod normal_media_url;
|
||||
pub mod player_info;
|
||||
|
||||
Reference in New Issue
Block a user