This repository was archived by the owner on Jan 22, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4.7k
/
Copy pathlib.rs
70 lines (59 loc) · 2.05 KB
/
lib.rs
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//! The `logger` module configures `env_logger`
use {
lazy_static::lazy_static,
std::sync::{Arc, RwLock},
};
lazy_static! {
static ref LOGGER: Arc<RwLock<env_logger::Logger>> =
Arc::new(RwLock::new(env_logger::Logger::from_default_env()));
}
struct LoggerShim {}
impl log::Log for LoggerShim {
fn enabled(&self, metadata: &log::Metadata) -> bool {
LOGGER.read().unwrap().enabled(metadata)
}
fn log(&self, record: &log::Record) {
LOGGER.read().unwrap().log(record);
}
fn flush(&self) {}
}
fn replace_logger(logger: env_logger::Logger) {
log::set_max_level(logger.filter());
*LOGGER.write().unwrap() = logger;
let _ = log::set_boxed_logger(Box::new(LoggerShim {}));
}
// Configures logging with a specific filter overriding RUST_LOG. _RUST_LOG is used instead
// so if set it takes precedence.
// May be called at any time to re-configure the log filter
pub fn setup_with(filter: &str) {
let logger =
env_logger::Builder::from_env(env_logger::Env::new().filter_or("_RUST_LOG", filter))
.format_timestamp_nanos()
.build();
replace_logger(logger);
}
// Configures logging with a default filter if RUST_LOG is not set
pub fn setup_with_default(filter: &str) {
let logger = env_logger::Builder::from_env(env_logger::Env::new().default_filter_or(filter))
.format_timestamp_nanos()
.build();
replace_logger(logger);
}
// Configures logging with the default filter "error" if RUST_LOG is not set
pub fn setup() {
setup_with_default("error");
}
// Configures file logging with a default filter if RUST_LOG is not set
pub fn setup_file_with_default(logfile: &str, filter: &str) {
use std::fs::OpenOptions;
let file = OpenOptions::new()
.create(true)
.append(true)
.open(logfile)
.unwrap();
let logger = env_logger::Builder::from_env(env_logger::Env::new().default_filter_or(filter))
.format_timestamp_nanos()
.target(env_logger::Target::Pipe(Box::new(file)))
.build();
replace_logger(logger);
}