1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use slog::Drain;
use slog_syslog::Facility;
use slog::o;
use super::error::Result;
pub fn setup_logging() -> Result<()> {
let _guard = slog_scope::set_global_logger(default_root_logger()?);
let _log_guard = slog_stdlog::init().unwrap();
Ok(())
}
pub fn default_root_logger() -> Result<slog::Logger> {
let syslog_drain = default_syslog_drain().unwrap_or(default_discard()?);
let term_drain = default_term_drain().unwrap_or(default_discard()?);
let drain = slog::Duplicate(syslog_drain, term_drain).fuse();
let logger = slog::Logger::root(drain, o!("who" => "rust-starter"));
Ok(logger)
}
fn default_discard() -> Result<slog_async::Async> {
let drain = slog_async::Async::default(slog::Discard);
Ok(drain)
}
fn default_term_drain() -> Result<slog_async::Async> {
let plain = slog_term::PlainSyncDecorator::new(std::io::stdout());
let term = slog_term::FullFormat::new(plain);
let drain = slog_async::Async::default(term.build().fuse());
Ok(drain)
}
fn default_syslog_drain() -> Result<slog_async::Async> {
let syslog = slog_syslog::unix_3164(Facility::LOG_USER)?;
let drain = slog_async::Async::default(syslog.fuse());
Ok(drain)
}