From 5cc45827f55a6ffd5fe4bee2ddcec66032ad588a Mon Sep 17 00:00:00 2001 From: "Y. T. Chung" Date: Sat, 12 Dec 2015 11:05:37 +0800 Subject: [PATCH] use env_logger instead of fern --- Cargo.toml | 2 +- src/bin/local.rs | 58 ++++++++++++++++++++++++++---------- src/bin/server.rs | 59 +++++++++++++++++++++++++++---------- src/relay/tcprelay/local.rs | 4 +-- 4 files changed, 88 insertions(+), 35 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b720e616..19e41468 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -69,8 +69,8 @@ byteorder = "^0.3.11" rand = "^0.3.9" time = "^0.1.32" clap = "^1.1.6" -fern = "^0.3.5" qrcode = "^0.1.6" +env_logger = "^0.3.2" [dependencies.libsodium-sys] git = "https://github.com/zonyitoo/libsodium-sys.git" diff --git a/src/bin/local.rs b/src/bin/local.rs index d4dbfcec..433ea38e 100644 --- a/src/bin/local.rs +++ b/src/bin/local.rs @@ -32,16 +32,20 @@ extern crate clap; extern crate shadowsocks; #[macro_use] extern crate log; -extern crate fern; extern crate time; extern crate coio; +extern crate env_logger; use clap::{App, Arg}; use std::net::{SocketAddr, IpAddr}; +use std::env; use coio::Scheduler; +use env_logger::LogBuilder; +use log::{LogRecord, LogLevelFilter}; + use shadowsocks::config::{Config, ServerConfig, self}; use shadowsocks::config::DEFAULT_DNS_CACHE_CAPACITY; use shadowsocks::relay::{RelayLocal, Relay}; @@ -82,25 +86,47 @@ fn main() { .help("Threads in thread pool")) .get_matches(); - let logger_config = |show_location| fern::DispatchConfig { - format: Box::new(move|msg: &str, level: &log::LogLevel, location: &log::LogLocation| { - if show_location { - format!("[{}][{}] [{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap(), - level, location.__module_path, msg) - } else { - format!("[{}][{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap(), level, msg) - } - }), - output: vec![fern::OutputConfig::stderr()], - level: log::LogLevelFilter::Trace - }; + let mut log_builder = LogBuilder::new(); + log_builder.filter(None, LogLevelFilter::Info); match matches.occurrences_of("VERBOSE") { - 0 => fern::init_global_logger(logger_config(false), log::LogLevelFilter::Info).unwrap(), - 1 => fern::init_global_logger(logger_config(true), log::LogLevelFilter::Debug).unwrap(), - _ => fern::init_global_logger(logger_config(true), log::LogLevelFilter::Trace).unwrap() + 0 => { + // Default filter + log_builder.format(|record: &LogRecord| { + format!("[{}][{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap(), + record.level(), record.args()) + }); + }, + 1 => { + let mut log_builder = log_builder.format(|record: &LogRecord| { + format!("[{}][{}] [{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap(), + record.level(), record.location().module_path(), record.args()) + }); + log_builder.filter(Some("sslocal"), LogLevelFilter::Debug); + }, + 2 => { + let mut log_builder = log_builder.format(|record: &LogRecord| { + format!("[{}][{}] [{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap(), + record.level(), record.location().module_path(), record.args()) + }); + log_builder.filter(Some("sslocal"), LogLevelFilter::Debug) + .filter(Some("shadowsocks"), LogLevelFilter::Debug); + }, + _ => { + let mut log_builder = log_builder.format(|record: &LogRecord| { + format!("[{}][{}] [{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap(), + record.level(), record.location().module_path(), record.args()) + }); + log_builder.filter(None, LogLevelFilter::Trace); + } } + if let Ok(env_conf) = env::var("RUST_LOG") { + log_builder.parse(&env_conf); + } + + log_builder.init().unwrap(); + let mut config = match matches.value_of("CONFIG") { Some(cpath) => { diff --git a/src/bin/server.rs b/src/bin/server.rs index 393cc8e5..0236ea07 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -34,14 +34,19 @@ extern crate clap; extern crate shadowsocks; #[macro_use] extern crate log; -extern crate fern; extern crate time; extern crate coio; +extern crate env_logger; + +use std::env; use clap::{App, Arg}; use coio::Scheduler; +use env_logger::LogBuilder; +use log::{LogRecord, LogLevelFilter}; + use shadowsocks::config::{Config, ServerConfig, self}; use shadowsocks::config::DEFAULT_DNS_CACHE_CAPACITY; use shadowsocks::relay::{RelayServer, Relay}; @@ -82,25 +87,47 @@ fn main() { .help("Threads in thread pool")) .get_matches(); - let logger_config = |show_location| fern::DispatchConfig { - format: Box::new(move|msg: &str, level: &log::LogLevel, location: &log::LogLocation| { - if show_location { - format!("[{}][{}] [{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap(), - level, location.__module_path, msg) - } else { - format!("[{}][{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap(), level, msg) - } - }), - output: vec![fern::OutputConfig::stderr()], - level: log::LogLevelFilter::Trace - }; + let mut log_builder = LogBuilder::new(); + log_builder.filter(None, LogLevelFilter::Info); match matches.occurrences_of("VERBOSE") { - 0 => fern::init_global_logger(logger_config(false), log::LogLevelFilter::Info).unwrap(), - 1 => fern::init_global_logger(logger_config(true), log::LogLevelFilter::Debug).unwrap(), - _ => fern::init_global_logger(logger_config(true), log::LogLevelFilter::Trace).unwrap() + 0 => { + // Default filter + log_builder.format(|record: &LogRecord| { + format!("[{}][{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap(), + record.level(), record.args()) + }); + }, + 1 => { + let mut log_builder = log_builder.format(|record: &LogRecord| { + format!("[{}][{}] [{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap(), + record.level(), record.location().module_path(), record.args()) + }); + log_builder.filter(Some("sslocal"), LogLevelFilter::Debug); + }, + 2 => { + let mut log_builder = log_builder.format(|record: &LogRecord| { + format!("[{}][{}] [{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap(), + record.level(), record.location().module_path(), record.args()) + }); + log_builder.filter(Some("sslocal"), LogLevelFilter::Debug) + .filter(Some("shadowsocks"), LogLevelFilter::Debug); + }, + _ => { + let mut log_builder = log_builder.format(|record: &LogRecord| { + format!("[{}][{}] [{}] {}", time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap(), + record.level(), record.location().module_path(), record.args()) + }); + log_builder.filter(None, LogLevelFilter::Trace); + } } + if let Ok(env_conf) = env::var("RUST_LOG") { + log_builder.parse(&env_conf); + } + + log_builder.init().unwrap(); + let mut config = match matches.value_of("CONFIG") { Some(cpath) => { diff --git a/src/relay/tcprelay/local.rs b/src/relay/tcprelay/local.rs index 5592d913..6885c52c 100644 --- a/src/relay/tcprelay/local.rs +++ b/src/relay/tcprelay/local.rs @@ -221,7 +221,7 @@ impl TcpRelayLocal { } } - info!("SYSTEM Connect {} local -> remote is closing", addr_cloned); + debug!("SYSTEM Connect {} local -> remote is closing", addr_cloned); let _ = encrypt_stream.get_ref().shutdown(Shutdown::Both); let _ = local_reader.get_ref().shutdown(Shutdown::Both); @@ -283,7 +283,7 @@ impl TcpRelayLocal { let _ = local_writer.flush(); - info!("SYSTEM Connect {} local <- remote is closing", addr); + debug!("SYSTEM Connect {} local <- remote is closing", addr); let _ = decrypt_stream.get_mut().shutdown(Shutdown::Both); let _ = local_writer.shutdown(Shutdown::Both);