diff --git a/Cargo.lock b/Cargo.lock index b6c4267..444fa09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -293,11 +293,13 @@ dependencies = [ "base64", "chrono", "clap", + "env_logger", "futures", "get_if_addrs", "headers", "hyper", "lazy_static", + "log", "md5", "mime_guess", "percent-encoding", @@ -313,6 +315,16 @@ dependencies = [ "uuid", ] +[[package]] +name = "env_logger" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +dependencies = [ + "humantime", + "log", +] + [[package]] name = "event-listener" version = "2.5.2" @@ -573,6 +585,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "hyper" version = "0.14.19" diff --git a/Cargo.toml b/Cargo.toml index 81028c0..e1118cb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,6 +35,8 @@ md5 = "0.7.0" lazy_static = "1.4.0" uuid = { version = "1.1.1", features = ["v4", "fast-rng"] } urlencoding = "2.1.0" +env_logger = { version = "0.9.0", default-features = false, features = ["humantime"] } +log = "0.4.17" [profile.release] lto = true diff --git a/src/main.rs b/src/main.rs index 793403d..176d7e6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,8 +2,14 @@ mod args; mod auth; mod server; +#[macro_use] +extern crate log; + pub type BoxResult = Result>; +use std::env; +use std::io::Write; + use crate::args::{encode_uri, matches, Args}; use crate::server::serve; @@ -13,6 +19,16 @@ async fn main() { } async fn run() -> BoxResult<()> { + if env::var("RUST_LOG").is_err() { + env::set_var("RUST_LOG", "info") + } + env_logger::builder() + .format(|buf, record| { + let timestamp = buf.timestamp(); + writeln!(buf, "[{} {}] {}", timestamp, record.level(), record.args()) + }) + .init(); + let args = Args::parse(matches())?; tokio::select! { ret = serve(args) => { diff --git a/src/server.rs b/src/server.rs index d175453..123f875 100644 --- a/src/server.rs +++ b/src/server.rs @@ -4,7 +4,7 @@ use crate::{encode_uri, Args, BoxResult}; use async_walkdir::WalkDir; use async_zip::write::{EntryOptions, ZipFileWriter}; use async_zip::Compression; -use chrono::{Local, TimeZone, Utc}; +use chrono::{TimeZone, Utc}; use futures::stream::StreamExt; use futures::TryStreamExt; use get_if_addrs::get_if_addrs; @@ -120,20 +120,16 @@ impl InnerService { let uri = req.uri().clone(); let cors = self.args.cors; - let timestamp = Local::now().format("%d/%b/%Y %H:%M:%S"); let mut res = match self.handle(req).await { Ok(res) => { - println!(r#"[{}] "{} {}" - {}"#, timestamp, method, uri, res.status()); + info!(r#""{} {}" - {}"#, method, uri, res.status()); res } Err(err) => { let mut res = Response::default(); let status = StatusCode::INTERNAL_SERVER_ERROR; status!(res, status); - eprintln!( - r#"[{}] "{} {}" - {} {}"#, - timestamp, method, uri, status, err - ); + error!(r#""{} {}" - {} {}"#, method, uri, status, err); res } }; @@ -363,7 +359,7 @@ impl InnerService { let path = path.to_owned(); tokio::spawn(async move { if let Err(e) = zip_dir(&mut writer, &path).await { - eprintln!("Failed to zip {}, {}", path.display(), e); + error!("Failed to zip {}, {}", path.display(), e); } }); let stream = ReaderStream::new(reader);