1
0
Fork 0
forked from wry/wry

autocommit 2022-05-01 17:23:55 CEST

This commit is contained in:
Julian Orth 2022-05-01 17:23:55 +02:00
parent 4373ed05bf
commit e1d5bf0e5d
39 changed files with 1772 additions and 57 deletions

73
src/it/test_logger.rs Normal file
View file

@ -0,0 +1,73 @@
use {
crate::utils::clonecell::CloneCell,
log::{Level, LevelFilter, Log, Metadata, Record},
std::{cell::Cell, fmt::Write as FmtWrite, io::Write, rc::Rc, time::SystemTime},
uapi::{Fd, OwnedFd},
};
#[thread_local]
static LEVEL: Cell<Level> = Cell::new(Level::Info);
#[thread_local]
static FILE: CloneCell<Option<Rc<OwnedFd>>> = CloneCell::new(None);
pub fn install() {
log::set_logger(&Logger).unwrap();
log::set_max_level(LevelFilter::Info);
}
pub fn set_level(level: Level) {
LEVEL.set(level);
log::set_max_level(level.to_level_filter());
}
pub fn set_file(file: Rc<OwnedFd>) {
FILE.set(Some(file));
}
pub fn unset_file() {
FILE.set(None);
}
struct Logger;
impl Log for Logger {
fn enabled(&self, metadata: &Metadata) -> bool {
metadata.level() <= LEVEL.get()
}
fn log(&self, record: &Record) {
if record.level() > LEVEL.get() {
return;
}
let mut buf = String::new();
let now = SystemTime::now();
let _ = if let Some(mp) = record.module_path() {
writeln!(
buf,
"[{} {:5} {}] {}",
humantime::format_rfc3339_millis(now),
record.level(),
mp,
record.args(),
)
} else {
writeln!(
buf,
"[{} {:5}] {}",
humantime::format_rfc3339_millis(now),
record.level(),
record.args(),
)
};
let mut fd = match FILE.get() {
Some(f) => f.borrow(),
_ => Fd::new(2),
};
let _ = fd.write_all(buf.as_bytes());
}
fn flush(&self) {
// nothing
}
}