mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 01:16:31 +03:00
Log the time too
Somehow I overlooked this originally.
This commit is contained in:
21
src/log.rs
21
src/log.rs
@@ -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()));
|
||||||
|
|||||||
Reference in New Issue
Block a user