Files
shadowsocks-rust/bin/common/logging/mod.rs
T
ty 07583f3cc8 Refactored and separate library into crates (#345)
* Refactored and separate library into crates

- shadowsocks: the core feature of shadowsocks
- shadowsocks-service: library for building shadowsocks services
    - dns, http, redir, socks, tunnel
    - load balancer
- shadowsocks-rust: release binaries

fix #347

* unified DnsResolver implementation

* unified local service common parameters into ServiceContext

- ServiceContext is common parameters shared between all local
implementations
- Completely removed https local support

* add #292 reply attack protection

* migrated redir local server

* support customizing outbound socket bind address

* manager outbound socket should accepts connect_opts

* republic local implementations

* socks5 udp server should always listen to client address

* socks4 controlled by local-socks4 feature

* socks4 also obey mode configuration

* socks server tcp cannot be disable. add support of udp-bind-addr parameter

* add udp-bind-addr for customizing udp-relay bind-addr

* local-dns infra, support customizing resolver

* fully implements DNS relay server

* support binding to specific interface on Linux-like platform

* tcp cannot be disabled in socks

* enable local-flow-stat

* fixed windows build

* fixed android specific warnings and compile errors

* allow udp_only mode in socks5

* dns relay listens to both TCP and UDP, mode controls outbound upstreams

* dns relay retries twice if request failed

* doc

* fix DnsClient typo

* fix stream EncryptWriter bug

* allow disable logging output

updated dependencies

* add readme

* refine doc

* remove depending on trust-dns-client

* socks4/4a client

* allow socks5 udp_only mode, fixes compile warning

* create standalone socks5 UDP relay server

- socks5 UDP association full cone (NAT2)

* server udp relay supports full cone (NAT2)

* acl moved to crate root

* redir udp relay support full cone (NAT2)

* standard socks5 udp test must use tcp_and_udp mode

* set server context fields with pub APIs

* udp_max_associations and udp_timeout default value set in Config

* local dns resolver retry with fixed attempts

* max_udp_association keeps unlimited by default

* fixed logging binary name

* pops first exited future result for local and server

* update reverse target index cache

* fix ProxyClientStreamWriteHalf that allows sending empty buffers

ref #232

* remove unused import when socks4 is disabled

* make balancer become a globally shared object

* print plugin exit status

* control local, server, manager services in features
2020-12-20 19:06:21 +08:00

73 lines
2.7 KiB
Rust

//! Loggin facilities
use std::path::Path;
use clap::ArgMatches;
use log::LevelFilter;
use log4rs::{
append::console::{ConsoleAppender, Target},
config::{Appender, Config, Logger, Root},
encode::pattern::PatternEncoder,
};
pub fn init_with_file<P>(path: P)
where
P: AsRef<Path>,
{
log4rs::init_file(path, Default::default()).expect("init logging with file");
}
pub fn init_with_config(bin_name: &str, matches: &ArgMatches) {
let debug_level = matches.occurrences_of("VERBOSE");
let without_time = matches.is_present("LOG_WITHOUT_TIME");
let mut pattern = String::new();
if !without_time {
pattern += "{d} ";
}
pattern += "{h({l}):<5} ";
if debug_level >= 1 {
pattern += "[{P}:{I}] [{M}] ";
}
pattern += "{m}{n}";
let logging_builder = Config::builder().appender(
Appender::builder().build(
"console",
Box::new(
ConsoleAppender::builder()
.encoder(Box::new(PatternEncoder::new(&pattern)))
.target(Target::Stderr)
.build(),
),
),
);
let config = match debug_level {
0 => logging_builder
.logger(Logger::builder().build(bin_name, LevelFilter::Info))
.logger(Logger::builder().build("shadowsocks", LevelFilter::Info))
.logger(Logger::builder().build("shadowsocks_service", LevelFilter::Info))
.build(Root::builder().appender("console").build(LevelFilter::Off)),
1 => logging_builder
.logger(Logger::builder().build(bin_name, LevelFilter::Debug))
.logger(Logger::builder().build("shadowsocks", LevelFilter::Debug))
.logger(Logger::builder().build("shadowsocks_service", LevelFilter::Debug))
.build(Root::builder().appender("console").build(LevelFilter::Off)),
2 => logging_builder
.logger(Logger::builder().build(bin_name, LevelFilter::Trace))
.logger(Logger::builder().build("shadowsocks", LevelFilter::Trace))
.logger(Logger::builder().build("shadowsocks_service", LevelFilter::Trace))
.build(Root::builder().appender("console").build(LevelFilter::Off)),
3 => logging_builder
.logger(Logger::builder().build(bin_name, LevelFilter::Trace))
.logger(Logger::builder().build("shadowsocks", LevelFilter::Trace))
.logger(Logger::builder().build("shadowsocks_service", LevelFilter::Trace))
.build(Root::builder().appender("console").build(LevelFilter::Debug)),
_ => logging_builder.build(Root::builder().appender("console").build(LevelFilter::Trace)),
}
.expect("logging");
log4rs::init_config(config).expect("logging");
}