main.rs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. mod control_c;
  2. mod server;
  3. pub mod db_connector;
  4. mod msv;
  5. mod trades;
  6. mod params_utils;
  7. use std::sync::Arc;
  8. use std::sync::atomic::{AtomicBool, Ordering};
  9. use std::time::Duration;
  10. use tracing::{info, warn};
  11. use tracing_appender_timezone::non_blocking::WorkerGuard;
  12. // 日志级别配置
  13. fn log_level_init(log_str: String, port: u32, app_name: String) -> WorkerGuard {
  14. info!("日志级别读取成功:{}。", log_str);
  15. global::log_utils::final_init(log_str.as_str(), port, app_name)
  16. }
  17. #[tokio::main(flavor = "multi_thread")]
  18. async fn main() {
  19. // 日志级别配置
  20. let _ = log_level_init("info".to_string(), 18888, "data-center".to_string());
  21. // 掌控全局的关闭
  22. let running = Arc::new(AtomicBool::new(true));
  23. // panic错误捕获,panic级别的错误直接退出
  24. // let panic_running = running.clone();
  25. std::panic::set_hook(Box::new(move |panic_info| {
  26. let msg = format!("type=panic, msg={:?}, location={:?}", panic_info.to_string(), panic_info.location());
  27. warn!("{}", msg);
  28. // panic_running.store(false, Ordering::Relaxed);
  29. }));
  30. // 初始化数据服务器
  31. server::run_server(18888, running.clone());
  32. // ctrl c退出检查程序
  33. control_c::exit_handler(running.clone());
  34. // 每一秒检查一次程序是否结束
  35. while running.load(Ordering::Relaxed) {
  36. tokio::time::sleep(Duration::from_secs(1)).await;
  37. }
  38. }