Simplify loggers
This commit is contained in:
parent
e745ef3ad0
commit
e143bf8578
2 changed files with 25 additions and 45 deletions
|
|
@ -1,7 +1,6 @@
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::cmp::min;
|
use std::cmp::min;
|
||||||
use std::io::stderr;
|
use std::io::{stderr, Write};
|
||||||
use std::io::Write;
|
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
// The log crate defines
|
// The log crate defines
|
||||||
|
|
@ -12,34 +11,18 @@ pub type Level = usize;
|
||||||
pub struct Entry<S>(pub Level, pub S);
|
pub struct Entry<S>(pub Level, pub S);
|
||||||
|
|
||||||
pub trait Logger {
|
pub trait Logger {
|
||||||
fn write<S: AsRef<str> + Into<String>>(&self, level: Level, msg: S)
|
fn write(&self, level: Level, msg: &str);
|
||||||
where
|
fn writeln(&self, level: Level, msg: &str);
|
||||||
Self: Sized;
|
fn info(&self, msg: &str) {
|
||||||
fn writeln<S: AsRef<str> + Into<String>>(&self, level: Level, msg: S)
|
|
||||||
where
|
|
||||||
Self: Sized;
|
|
||||||
fn info<S: AsRef<str> + Into<String>>(&self, msg: S)
|
|
||||||
where
|
|
||||||
Self: Sized,
|
|
||||||
{
|
|
||||||
self.writeln(3, msg);
|
self.writeln(3, msg);
|
||||||
}
|
}
|
||||||
fn debug<S: AsRef<str> + Into<String>>(&self, msg: S)
|
fn debug(&self, msg: &str) {
|
||||||
where
|
|
||||||
Self: Sized,
|
|
||||||
{
|
|
||||||
self.writeln(4, msg);
|
self.writeln(4, msg);
|
||||||
}
|
}
|
||||||
fn trace<S: AsRef<str> + Into<String>>(&self, msg: S)
|
fn trace(&self, msg: &str) {
|
||||||
where
|
|
||||||
Self: Sized,
|
|
||||||
{
|
|
||||||
self.writeln(5, msg);
|
self.writeln(5, msg);
|
||||||
}
|
}
|
||||||
fn put<S: AsRef<str> + Into<String>>(&self, entries: impl IntoIterator<Item = Entry<S>>) -> usize
|
fn put<'a>(&self, entries: impl IntoIterator<Item = Entry<&'a str>>) -> usize {
|
||||||
where
|
|
||||||
Self: Sized,
|
|
||||||
{
|
|
||||||
let mut c = 0;
|
let mut c = 0;
|
||||||
for item in entries {
|
for item in entries {
|
||||||
self.writeln(item.0, item.1);
|
self.writeln(item.0, item.1);
|
||||||
|
|
@ -55,21 +38,21 @@ pub struct StdErrLogger {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Logger for StdErrLogger {
|
impl Logger for StdErrLogger {
|
||||||
fn write<S: AsRef<str> + Into<String>>(&self, _level: Level, msg: S) {
|
fn write(&self, _level: Level, msg: &str) {
|
||||||
*self.line_started.borrow_mut() = true;
|
*self.line_started.borrow_mut() = true;
|
||||||
write!(&mut stderr(), "{}", msg.as_ref()).unwrap();
|
write!(&mut stderr(), "{msg}").expect("Could not write to stderr");
|
||||||
}
|
}
|
||||||
fn writeln<S: AsRef<str> + Into<String>>(&self, _level: Level, msg: S) {
|
fn writeln(&self, _level: Level, msg: &str) {
|
||||||
if self.line_started.replace(false) {
|
if self.line_started.replace(false) {
|
||||||
writeln!(&mut stderr()).unwrap();
|
writeln!(&mut stderr()).expect("Could not write to stderr");
|
||||||
}
|
}
|
||||||
writeln!(&mut stderr(), "{}", msg.as_ref()).unwrap();
|
writeln!(&mut stderr(), "{msg}").expect("Could not write to stderr");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl Drop for StdErrLogger {
|
impl Drop for StdErrLogger {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
if *self.line_started.borrow() {
|
if *self.line_started.borrow() {
|
||||||
writeln!(&mut stderr()).unwrap();
|
writeln!(&mut stderr()).expect("Could not write to stderr");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -87,14 +70,14 @@ impl<'a, L> FilteringLogger<'a, L> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, L: Logger> Logger for FilteringLogger<'a, L> {
|
impl<'a, L: Logger> Logger for FilteringLogger<'a, L> {
|
||||||
fn write<S: AsRef<str> + Into<String>>(&self, level: Level, str: S) {
|
fn write(&self, level: Level, msg: &str) {
|
||||||
if level <= self.max_level {
|
if level <= self.max_level {
|
||||||
self.logger.write(level, str);
|
self.logger.write(level, msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn writeln<S: AsRef<str> + Into<String>>(&self, level: Level, str: S) {
|
fn writeln(&self, level: Level, msg: &str) {
|
||||||
if level <= self.max_level {
|
if level <= self.max_level {
|
||||||
self.logger.writeln(level, str);
|
self.logger.writeln(level, msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -117,24 +100,21 @@ impl StoringLogger {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Logger for StoringLogger {
|
impl Logger for StoringLogger {
|
||||||
fn write<S: AsRef<str> + Into<String>>(&self, level: Level, line: S) {
|
fn write(&self, level: Level, msg: &str) {
|
||||||
let mut log = self.log.borrow_mut();
|
let mut log = self.log.borrow_mut();
|
||||||
let entry = if log.0 {
|
let entry = if log.0 {
|
||||||
log
|
log.1.pop().map(|e| Entry(min(e.0, level), e.1 + msg))
|
||||||
.1
|
|
||||||
.pop()
|
|
||||||
.map(|e| Entry(min(e.0, level), e.1 + line.as_ref()))
|
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
.unwrap_or_else(|| Entry(level, line.into()));
|
.unwrap_or_else(|| Entry(level, msg.to_string()));
|
||||||
log.0 = true;
|
log.0 = true;
|
||||||
log.1.push(entry);
|
log.1.push(entry);
|
||||||
}
|
}
|
||||||
fn writeln<S: AsRef<str> + Into<String>>(&self, level: Level, line: S) {
|
fn writeln(&self, level: Level, msg: &str) {
|
||||||
let mut log = self.log.borrow_mut();
|
let mut log = self.log.borrow_mut();
|
||||||
log.0 = false;
|
log.0 = false;
|
||||||
log.1.push(Entry(level, line.into()));
|
log.1.push(Entry(level, msg.to_string()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -156,13 +156,13 @@ impl<
|
||||||
if *did_run {
|
if *did_run {
|
||||||
let log = recorder.to_string(slog::Level::Info);
|
let log = recorder.to_string(slog::Level::Info);
|
||||||
if !log.is_empty() {
|
if !log.is_empty() {
|
||||||
self.0.writeln(3, log);
|
self.0.writeln(3, &log);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.0.write(3, ".");
|
self.0.write(3, ".");
|
||||||
}
|
}
|
||||||
Err(_) => self.0.writeln(2, recorder.to_string(slog::Level::Trace)),
|
Err(_) => self.0.writeln(2, &recorder.to_string(slog::Level::Trace)),
|
||||||
}
|
}
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
@ -195,7 +195,7 @@ impl<
|
||||||
let result = (self.1).0.core.run_symbol(&symbol, &log, force).await;
|
let result = (self.1).0.core.run_symbol(&symbol, &log, force).await;
|
||||||
self.0.write(
|
self.0.write(
|
||||||
3,
|
3,
|
||||||
recorder.to_string(if result.is_ok() {
|
&recorder.to_string(if result.is_ok() {
|
||||||
slog::Level::Info
|
slog::Level::Info
|
||||||
} else {
|
} else {
|
||||||
slog::Level::Trace
|
slog::Level::Trace
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue