chore: update logger and save logs to file

This commit is contained in:
MedzikUser 2022-06-26 12:35:58 +02:00
parent 47d6bc47cf
commit ab60315350
No known key found for this signature in database
GPG Key ID: A5FAC1E185C112DB
6 changed files with 81 additions and 49 deletions

3
.gitignore vendored
View File

@ -8,3 +8,6 @@
# IDEs
.vscode
.idea
# Logs
*.log

69
Cargo.lock generated
View File

@ -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"

View File

@ -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"] }

View File

@ -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 {

View File

@ -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?;

View File

@ -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?;