Răsfoiți Sursa

日志在本地也存放一份(日志分流)。

skyfffire 2 ani în urmă
părinte
comite
756a57dc5d
7 a modificat fișierele cu 75 adăugiri și 27 ștergeri
  1. 3 1
      .gitignore
  2. 1 0
      Cargo.toml
  3. 1 0
      global/.gitignore
  4. 5 3
      global/Cargo.toml
  5. 26 16
      global/src/log_utils.rs
  6. 33 0
      global/tests/appender_test.rs
  7. 6 7
      src/main.rs

+ 3 - 1
.gitignore

@@ -3,4 +3,6 @@
 
 Cargo.lock
 config.toml
-*.log
+*.log
+*.log.*
+/logs

+ 1 - 0
Cargo.toml

@@ -14,6 +14,7 @@ tokio = { version = "1.31.0", features = ["full"] }
 chrono = "0.4.26"
 tracing = "0.1"
 tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
+tracing-appender = "0.2.2"
 serde = { version = "1.0.188", features = ["derive"] }
 actix-rt = "2.5.0"
 actix-web = "4.0.0-beta.12"

+ 1 - 0
global/.gitignore

@@ -1,4 +1,5 @@
 /target
 /.idea
+/logs
 
 Cargo.lock

+ 5 - 3
global/Cargo.toml

@@ -9,8 +9,10 @@ edition = "2021"
 rust_decimal = "1.32.0"
 rust_decimal_macros = "1.32.0"
 tracing = "0.1"
-tracing-subscriber = "0.3.17"
-toml = "0.5"
+tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
+tracing-appender = "0.2.2"
+toml = "0.5.11"
 serde = "1.0.183"
 serde_derive = "1.0"
-serde_json = "1.0.104"
+serde_json = "1.0.104"
+tokio = { version = "1.31.0", features = ["full"] }

+ 26 - 16
global/src/log_utils.rs

@@ -1,30 +1,40 @@
-use tracing_subscriber::{FmtSubscriber};
+use std::io;
+use tracing_appender::non_blocking::WorkerGuard;
+use tracing_subscriber::fmt;
+use tracing_subscriber::layer::SubscriberExt;
 
 pub fn init_log_with_debug() {
-    final_init(tracing::Level::DEBUG)
+    let _ = final_init(tracing::Level::DEBUG.as_str());
 }
 
 pub fn init_log_with_trace() {
-    final_init(tracing::Level::TRACE)
+    let _ = final_init(tracing::Level::TRACE.as_str());
 }
 
 pub fn init_log_with_info() {
-    final_init(tracing::Level::INFO)
+    let _ = final_init(tracing::Level::INFO.as_str());
 }
 
-pub fn final_init(level: tracing::Level) {
-    // let filter = EnvFilter::from_default_env()
-    //     .add_directive("exchanges=trace".parse().unwrap())
-    //     .add_directive("global=trace".parse().unwrap())
-    //     .add_directive("standard=trace".parse().unwrap())
-    //     .add_directive("tests=trace".parse().unwrap())
-    //     .add_directive("strategy=trace".parse().unwrap());
+pub fn final_init(level: &str) -> WorkerGuard {
+    let file_appender = tracing_appender::rolling::daily("./logs", "as-debug.log");
+    let (non_blocking, guard) = tracing_appender::non_blocking(file_appender);
 
-    let subscriber = FmtSubscriber::builder()
-        // .with_env_filter(filter)
-        .with_max_level(level)
-        .with_span_events(tracing_subscriber::fmt::format::FmtSpan::FULL)
-        .finish();
+    let fmt_layer = fmt::layer()
+        .with_target(false)
+        .with_level(true)
+        .with_writer(io::stdout);
 
+    let file_layer = fmt::layer()
+        .with_target(true)
+        .with_ansi(false)
+        .with_level(true)
+        .with_writer(non_blocking.clone());
+
+    let subscriber = tracing_subscriber::Registry::default()
+        .with(fmt_layer)
+        .with(file_layer)
+        .with(tracing_subscriber::EnvFilter::new(level));
     tracing::subscriber::set_global_default(subscriber).unwrap();
+
+    return guard;
 }

+ 33 - 0
global/tests/appender_test.rs

@@ -0,0 +1,33 @@
+use tracing::{info};
+use tracing_subscriber::{fmt};
+use tracing_subscriber::prelude::*;
+use std::io;
+
+#[tokio::test]
+async fn appender_test() {
+    let file_appender = tracing_appender::rolling::daily("./logs", "tracing.log");
+    let (non_blocking, _) = tracing_appender::non_blocking(file_appender);
+
+    let fmt_layer = fmt::layer()
+        .with_target(false)
+        .with_level(true)
+        .with_writer(io::stdout);
+
+    let file_layer = fmt::layer()
+        .with_target(true)
+        .with_ansi(false)
+        .with_level(true)
+        .with_writer(non_blocking.clone());
+
+    let subscriber = tracing_subscriber::Registry::default()
+        .with(fmt_layer)
+        .with(file_layer)
+        .with(tracing_subscriber::EnvFilter::new("info"));
+
+    let _ = tracing::subscriber::set_global_default(subscriber);
+    let number = 42;
+    info!(answer = number, "the answer to life, the universe, and everything");
+
+    // 使 main 函数“等待”一段时间,增大日志被正确写入的机会
+    tokio::time::sleep(std::time::Duration::from_secs(10)).await;
+}

+ 6 - 7
src/main.rs

@@ -2,18 +2,17 @@ mod server;
 mod control_c;
 mod quant_libs;
 
-use std::str::FromStr;
 use std::sync::Arc;
 use std::sync::atomic::{AtomicBool, Ordering};
 use std::time::Duration;
 use tracing::{info};
+use tracing_appender::non_blocking::WorkerGuard;
 use global::params::Params;
 
 // 日志级别配置
-fn log_level_init(log_str: String) {
-    let tracing_log_level = tracing::Level::from_str(log_str.as_str()).unwrap();
-    info!("日志级别读取成功:{}。", tracing_log_level);
-    global::log_utils::final_init(tracing_log_level);
+fn log_level_init(log_str: String) -> WorkerGuard {
+    info!("日志级别读取成功:{}。", log_str);
+    global::log_utils::final_init(log_str.as_str())
 }
 
 // 获取本地配置
@@ -41,14 +40,14 @@ async fn main() {
     // 日志级别配置
     let params = read_params();
     // 日志级别配置
-    log_level_init(params.log_level.clone());
+    let _guard = log_level_init(params.log_level.clone());
     info!("配置读取成功:{:?}。", params);
     // 主进程控制
     let running = Arc::new(AtomicBool::new(true));
     // ws退出程序
     let ws_running = Arc::new(AtomicBool::new(true));
     // quant初始化动作
-    let quant_arc = quant_libs::init(params, ws_running.clone(), running.clone()).await;
+    let quant_arc = quant_libs::init(params.clone(), ws_running.clone(), running.clone()).await;
     // 初始化中控服务
     server::run_server(params.port.clone(), running.clone(), quant_arc.clone());
     // 退出检查程序