Log the time too

Somehow I overlooked this originally.
This commit is contained in:
Floris Bruynooghe
2019-11-29 15:54:28 +01:00
parent ecf1b4a9f7
commit de28ed68c9

View File

@@ -9,6 +9,7 @@ use std::path::{Path, PathBuf};
/// A logger for a [Context]. /// A logger for a [Context].
#[derive(Debug)] #[derive(Debug)]
pub struct Logger { pub struct Logger {
created: std::time::Instant,
logdir: PathBuf, logdir: PathBuf,
logfile: String, logfile: String,
file_handle: fs::File, file_handle: fs::File,
@@ -52,6 +53,7 @@ impl Logger {
let max_files = 5; let max_files = 5;
Self::prune(&logdir, max_files)?; Self::prune(&logdir, max_files)?;
Ok(Logger { Ok(Logger {
created: std::time::Instant::now(),
logdir, logdir,
logfile: fname, logfile: fname,
file_handle: file, file_handle: file,
@@ -126,12 +128,13 @@ impl Logger {
} }
let thread = std::thread::current(); let thread = std::thread::current();
let msg = format!( let msg = format!(
"{} {:?}/{} [{}]: {}\n", "{time:8.2} {level} {thid:?}/{thname} [{callsite}]: {msg}\n",
level, time = self.created.elapsed().as_secs_f64(),
thread.id(), level = level,
thread.name().unwrap_or("unnamed"), thid = thread.id(),
callsite, thname = thread.name().unwrap_or("unnamed"),
msg callsite = callsite,
msg = msg,
); );
self.file_handle.write_all(msg.as_bytes())?; self.file_handle.write_all(msg.as_bytes())?;
self.bytes_written += msg.len(); self.bytes_written += msg.len();
@@ -219,21 +222,21 @@ mod tests {
println!("{}", log); println!("{}", log);
let lines: Vec<&str> = log.lines().collect(); let lines: Vec<&str> = log.lines().collect();
assert!(lines[0].starts_with("I")); assert!(lines[0].contains(" I "));
assert!(lines[0].contains(format!("{:?}", std::thread::current().id()).as_str())); assert!(lines[0].contains(format!("{:?}", std::thread::current().id()).as_str()));
assert!(lines[0] assert!(lines[0]
.contains(format!("{}", std::thread::current().name().unwrap_or("unnamed")).as_str())); .contains(format!("{}", std::thread::current().name().unwrap_or("unnamed")).as_str()));
assert!(lines[0].contains(&format!("src{}log.rs", std::path::MAIN_SEPARATOR))); assert!(lines[0].contains(&format!("src{}log.rs", std::path::MAIN_SEPARATOR)));
assert!(lines[0].contains("foo")); assert!(lines[0].contains("foo"));
assert!(lines[1].starts_with("W")); assert!(lines[1].contains(" W "));
assert!(lines[1].contains(format!("{:?}", std::thread::current().id()).as_str())); assert!(lines[1].contains(format!("{:?}", std::thread::current().id()).as_str()));
assert!(lines[1] assert!(lines[1]
.contains(format!("{}", std::thread::current().name().unwrap_or("unnamed")).as_str())); .contains(format!("{}", std::thread::current().name().unwrap_or("unnamed")).as_str()));
assert!(lines[1].contains(&format!("src{}log.rs", std::path::MAIN_SEPARATOR))); assert!(lines[1].contains(&format!("src{}log.rs", std::path::MAIN_SEPARATOR)));
assert!(lines[1].contains("bar")); assert!(lines[1].contains("bar"));
assert!(lines[2].starts_with("E")); assert!(lines[2].contains(" E "));
assert!(lines[2].contains(format!("{:?}", std::thread::current().id()).as_str())); assert!(lines[2].contains(format!("{:?}", std::thread::current().id()).as_str()));
assert!(lines[2] assert!(lines[2]
.contains(format!("{}", std::thread::current().name().unwrap_or("unnamed")).as_str())); .contains(format!("{}", std::thread::current().name().unwrap_or("unnamed")).as_str()));