From ab603153503bb1a22fa18e535031f48c48452583 Mon Sep 17 00:00:00 2001 From: MedzikUser Date: Sun, 26 Jun 2022 12:35:58 +0200 Subject: [PATCH] chore: update logger and save logs to file --- .gitignore | 3 ++ Cargo.lock | 69 ++++++++++++++++++++---------------- Cargo.toml | 10 +++--- src/main.rs | 41 ++++++++++++++------- src/tcp/handle_connection.rs | 4 +-- src/tcp/handle_websocket.rs | 3 ++ 6 files changed, 81 insertions(+), 49 deletions(-) diff --git a/.gitignore b/.gitignore index f998b4d..37c812c 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ # IDEs .vscode .idea + +# Logs +*.log diff --git a/Cargo.lock b/Cargo.lock index 5a430ce..79eac7c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -107,24 +107,13 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5538cd660450ebeb4234cfecf8f2284b844ffc4c50531e66d584ad5b91293613" +checksum = "87eba3c8c7f42ef17f6c659fc7416d0f4758cd3e58861ee63c5fa4a4dde649e4" dependencies = [ "os_str_bytes", ] -[[package]] -name = "colored" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" -dependencies = [ - "atty", - "lazy_static", - "winapi", -] - [[package]] name = "cpufeatures" version = "0.2.2" @@ -225,9 +214,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" [[package]] name = "heck" @@ -274,9 +263,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.8.2" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", "hashbrown", @@ -288,12 +277,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - [[package]] name = "libc" version = "0.2.126" @@ -353,6 +336,15 @@ dependencies = [ "libc", ] +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + [[package]] name = "once_cell" version = "1.12.0" @@ -479,7 +471,7 @@ dependencies = [ "futures-util", "libloading", "log", - "simple_logger", + "simplelog", "tokio", "tokio-tungstenite", "tungstenite", @@ -497,15 +489,14 @@ dependencies = [ ] [[package]] -name = "simple_logger" -version = "2.1.0" +name = "simplelog" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75a9723083573ace81ad0cdfc50b858aa3c366c48636edb4109d73122a0c0ea" +checksum = "48dfff04aade74dd495b007c831cd6f4e0cee19c344dd9dc0884c0289b70a786" dependencies = [ - "atty", - "colored", "log", - "winapi", + "termcolor", + "time", ] [[package]] @@ -576,6 +567,24 @@ dependencies = [ "syn", ] +[[package]] +name = "time" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" +dependencies = [ + "itoa", + "libc", + "num_threads", + "time-macros", +] + +[[package]] +name = "time-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" + [[package]] name = "tinyvec" version = "1.6.0" diff --git a/Cargo.toml b/Cargo.toml index 2c1549b..944d669 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,11 +19,11 @@ codegen-units = 1 [dependencies] anyhow = "1.0.58" async-trait = "0.1.56" -clap = { version = "3.2.6", features = ["derive"] } -futures-util = { version = "0.3", default-features = false, features = ["sink", "std"] } libloading = "0.7.3" -log = { version = "0.4.17", features = ["release_max_level_info", "max_level_debug"] } -simple_logger = { version = "2.1.0", default-features = false, features = ["colors"] } -tokio = { version = "1.19.2", features = ["rt-multi-thread", "macros", "net"] } +simplelog = "0.12.0" tokio-tungstenite = "0.17.1" tungstenite = "0.17.2" +clap = { version = "3.2.6", features = ["derive"] } +futures-util = { version = "0.3", default-features = false, features = ["sink", "std"] } +log = { version = "0.4.17", features = ["release_max_level_info", "max_level_debug"] } +tokio = { version = "1.19.2", features = ["rt-multi-thread", "macros", "net"] } diff --git a/src/main.rs b/src/main.rs index 73768fb..cbe29e2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,12 @@ -use std::net::TcpListener; +use std::{net::TcpListener, fs::File}; use clap::Parser; +use log::{LevelFilter, info}; use servers::{ plugins::loader, tcp::{handle_connection, handle_websocket, Client}, }; -use simple_logger::SimpleLogger; +use simplelog::{CombinedLogger, TermLogger, WriteLogger, Config, TerminalMode, ColorChoice}; #[derive(Parser)] #[clap( @@ -34,26 +35,42 @@ struct Cli { short = 'w', long = "ws-port", default_value = "9998", - help = "Websocket server port [set 0 to random]", - display_order = 2 + help = "WebSocket server port [set 0 to random]", + display_order = 3 )] ws_port: String, + + #[clap( + long = "disable-websocket", + help = "Disable WebSocket proxy to Tcp", + display_order = 4 + )] + ws_disable: bool, } #[tokio::main] async fn main() -> anyhow::Result<()> { // init logger - SimpleLogger::new().init()?; + CombinedLogger::init( + vec![ + TermLogger::new(LevelFilter::Trace, Config::default(), TerminalMode::Mixed, ColorChoice::Auto), + WriteLogger::new(LevelFilter::Debug, Config::default(), File::create("server.log").unwrap()), + ] + )?; // parse cli args let cli = Cli::parse(); + // if enabled start WebSocket server + if !cli.ws_disable { + tokio::spawn(start_ws_server( + cli.host.clone(), + cli.ws_port, + cli.port.clone(), + )); + } + // start tcp server - tokio::spawn(start_ws_server( - cli.host.clone(), - cli.ws_port, - cli.port.clone(), - )); start_tcp_server(cli.host, cli.port).await?; Ok(()) @@ -64,7 +81,7 @@ async fn start_tcp_server(host: String, port: String) -> anyhow::Result<()> { // listen Tcp server let listener = TcpListener::bind(format!("{host}:{port}"))?; - println!("Tcp server started at: {}", listener.local_addr()?); + info!("Tcp server started at: {}", listener.local_addr()?); // load plugins, commands and events let plugin_manager = loader()?; @@ -86,7 +103,7 @@ async fn start_ws_server(host: String, port: String, tcp_port: String) -> anyhow // listen Tcp server let listener = tokio::net::TcpListener::bind(format!("{host}:{port}")).await?; - println!("WebSocket server started at: {}", listener.local_addr()?); + info!("WebSocket server started at: {}", listener.local_addr()?); // Accepts a new incoming connection from this listener. while let Ok((stream, _address)) = listener.accept().await { diff --git a/src/tcp/handle_connection.rs b/src/tcp/handle_connection.rs index bfbda5e..4125cba 100644 --- a/src/tcp/handle_connection.rs +++ b/src/tcp/handle_connection.rs @@ -1,6 +1,6 @@ use std::io::Write; -use log::{error, trace}; +use log::{error, trace, info}; use crate::plugins::PluginManagerType; @@ -11,7 +11,7 @@ pub async fn handle_connection( mut client: Client, plugin_manager: PluginManagerType, ) -> anyhow::Result<()> { - println!("New Client: {}", client.stream.peer_addr()?); + info!("New Client: {}", client.stream.peer_addr()?); // run `onConnect` events from plugins check_event(&mut client, &plugin_manager, "onConnect").await?; diff --git a/src/tcp/handle_websocket.rs b/src/tcp/handle_websocket.rs index e04104f..8c2674a 100644 --- a/src/tcp/handle_websocket.rs +++ b/src/tcp/handle_websocket.rs @@ -1,6 +1,7 @@ #![allow(clippy::unused_io_amount)] use futures_util::{SinkExt, StreamExt}; +use log::info; use tokio::{ io::{AsyncReadExt, AsyncWriteExt}, net::TcpStream, @@ -11,6 +12,8 @@ use super::MAX_PACKET_LEN; /// Handle WebSocket connection pub async fn handle_websocket(stream: TcpStream, tcp_port: String) -> anyhow::Result<()> { + info!("New WebSocket Client: {}", stream.peer_addr()?); + // accept connection as WebSocket let ws_stream = tokio_tungstenite::accept_async(stream).await?;