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 # IDEs
.vscode .vscode
.idea .idea
# Logs
*.log

69
Cargo.lock generated
View File

@ -107,24 +107,13 @@ dependencies = [
[[package]] [[package]]
name = "clap_lex" name = "clap_lex"
version = "0.2.2" version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5538cd660450ebeb4234cfecf8f2284b844ffc4c50531e66d584ad5b91293613" checksum = "87eba3c8c7f42ef17f6c659fc7416d0f4758cd3e58861ee63c5fa4a4dde649e4"
dependencies = [ dependencies = [
"os_str_bytes", "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]] [[package]]
name = "cpufeatures" name = "cpufeatures"
version = "0.2.2" version = "0.2.2"
@ -225,9 +214,9 @@ dependencies = [
[[package]] [[package]]
name = "hashbrown" name = "hashbrown"
version = "0.11.2" version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
[[package]] [[package]]
name = "heck" name = "heck"
@ -274,9 +263,9 @@ dependencies = [
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "1.8.2" version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a" checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
dependencies = [ dependencies = [
"autocfg", "autocfg",
"hashbrown", "hashbrown",
@ -288,12 +277,6 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.126" version = "0.2.126"
@ -353,6 +336,15 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "num_threads"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "once_cell" name = "once_cell"
version = "1.12.0" version = "1.12.0"
@ -479,7 +471,7 @@ dependencies = [
"futures-util", "futures-util",
"libloading", "libloading",
"log", "log",
"simple_logger", "simplelog",
"tokio", "tokio",
"tokio-tungstenite", "tokio-tungstenite",
"tungstenite", "tungstenite",
@ -497,15 +489,14 @@ dependencies = [
] ]
[[package]] [[package]]
name = "simple_logger" name = "simplelog"
version = "2.1.0" version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c75a9723083573ace81ad0cdfc50b858aa3c366c48636edb4109d73122a0c0ea" checksum = "48dfff04aade74dd495b007c831cd6f4e0cee19c344dd9dc0884c0289b70a786"
dependencies = [ dependencies = [
"atty",
"colored",
"log", "log",
"winapi", "termcolor",
"time",
] ]
[[package]] [[package]]
@ -576,6 +567,24 @@ dependencies = [
"syn", "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]] [[package]]
name = "tinyvec" name = "tinyvec"
version = "1.6.0" version = "1.6.0"

View File

@ -19,11 +19,11 @@ codegen-units = 1
[dependencies] [dependencies]
anyhow = "1.0.58" anyhow = "1.0.58"
async-trait = "0.1.56" 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" libloading = "0.7.3"
log = { version = "0.4.17", features = ["release_max_level_info", "max_level_debug"] } simplelog = "0.12.0"
simple_logger = { version = "2.1.0", default-features = false, features = ["colors"] }
tokio = { version = "1.19.2", features = ["rt-multi-thread", "macros", "net"] }
tokio-tungstenite = "0.17.1" tokio-tungstenite = "0.17.1"
tungstenite = "0.17.2" 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 clap::Parser;
use log::{LevelFilter, info};
use servers::{ use servers::{
plugins::loader, plugins::loader,
tcp::{handle_connection, handle_websocket, Client}, tcp::{handle_connection, handle_websocket, Client},
}; };
use simple_logger::SimpleLogger; use simplelog::{CombinedLogger, TermLogger, WriteLogger, Config, TerminalMode, ColorChoice};
#[derive(Parser)] #[derive(Parser)]
#[clap( #[clap(
@ -34,26 +35,42 @@ struct Cli {
short = 'w', short = 'w',
long = "ws-port", long = "ws-port",
default_value = "9998", default_value = "9998",
help = "Websocket server port [set 0 to random]", help = "WebSocket server port [set 0 to random]",
display_order = 2 display_order = 3
)] )]
ws_port: String, ws_port: String,
#[clap(
long = "disable-websocket",
help = "Disable WebSocket proxy to Tcp",
display_order = 4
)]
ws_disable: bool,
} }
#[tokio::main] #[tokio::main]
async fn main() -> anyhow::Result<()> { async fn main() -> anyhow::Result<()> {
// init logger // 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 // parse cli args
let cli = Cli::parse(); 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 // 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?; start_tcp_server(cli.host, cli.port).await?;
Ok(()) Ok(())
@ -64,7 +81,7 @@ async fn start_tcp_server(host: String, port: String) -> anyhow::Result<()> {
// listen Tcp server // listen Tcp server
let listener = TcpListener::bind(format!("{host}:{port}"))?; 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 // load plugins, commands and events
let plugin_manager = loader()?; let plugin_manager = loader()?;
@ -86,7 +103,7 @@ async fn start_ws_server(host: String, port: String, tcp_port: String) -> anyhow
// listen Tcp server // listen Tcp server
let listener = tokio::net::TcpListener::bind(format!("{host}:{port}")).await?; 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. // Accepts a new incoming connection from this listener.
while let Ok((stream, _address)) = listener.accept().await { while let Ok((stream, _address)) = listener.accept().await {

View File

@ -1,6 +1,6 @@
use std::io::Write; use std::io::Write;
use log::{error, trace}; use log::{error, trace, info};
use crate::plugins::PluginManagerType; use crate::plugins::PluginManagerType;
@ -11,7 +11,7 @@ pub async fn handle_connection(
mut client: Client, mut client: Client,
plugin_manager: PluginManagerType, plugin_manager: PluginManagerType,
) -> anyhow::Result<()> { ) -> anyhow::Result<()> {
println!("New Client: {}", client.stream.peer_addr()?); info!("New Client: {}", client.stream.peer_addr()?);
// run `onConnect` events from plugins // run `onConnect` events from plugins
check_event(&mut client, &plugin_manager, "onConnect").await?; check_event(&mut client, &plugin_manager, "onConnect").await?;

View File

@ -1,6 +1,7 @@
#![allow(clippy::unused_io_amount)] #![allow(clippy::unused_io_amount)]
use futures_util::{SinkExt, StreamExt}; use futures_util::{SinkExt, StreamExt};
use log::info;
use tokio::{ use tokio::{
io::{AsyncReadExt, AsyncWriteExt}, io::{AsyncReadExt, AsyncWriteExt},
net::TcpStream, net::TcpStream,
@ -11,6 +12,8 @@ use super::MAX_PACKET_LEN;
/// Handle WebSocket connection /// Handle WebSocket connection
pub async fn handle_websocket(stream: TcpStream, tcp_port: String) -> anyhow::Result<()> { pub async fn handle_websocket(stream: TcpStream, tcp_port: String) -> anyhow::Result<()> {
info!("New WebSocket Client: {}", stream.peer_addr()?);
// accept connection as WebSocket // accept connection as WebSocket
let ws_stream = tokio_tungstenite::accept_async(stream).await?; let ws_stream = tokio_tungstenite::accept_async(stream).await?;