Radish alpha
r
rad:z3qg5TKmN83afz2fj9z3fQjU8vaYE
Radicle CI adapter for native CI
Radicle
Git
feat: add a time stamp to each log message
Merged liw opened 1 year ago

Thank-you: Richard Levitte

Signed-off-by: Lars Wirzenius liw@liw.fi

1 file changed +15 -44 0ba7f6ba f3d4e4a9
modified src/logfile.rs
@@ -4,6 +4,8 @@ use std::{
    path::{Path, PathBuf},
};

+
use time::{macros::format_description, OffsetDateTime};
+

#[derive(Debug)]
pub struct AdminLog {
    filename: PathBuf,
@@ -23,56 +25,15 @@ impl AdminLog {
        })
    }

-
    pub fn h1(&mut self, text: &str) -> Result<(), LogError> {
-
        self.write("\n# ")?;
-
        self.write(text)?;
-
        self.write("\n\n")?;
-
        Ok(())
-
    }
-

-
    pub fn h2(&mut self, text: &str) -> Result<(), LogError> {
-
        self.write("\n## ")?;
-
        self.write(text)?;
-
        self.write("\n\n")?;
-
        Ok(())
-
    }
-

-
    pub fn h3(&mut self, text: &str) -> Result<(), LogError> {
-
        self.write("\n### ")?;
-
        self.write(text)?;
-
        self.write("\n\n")?;
-
        Ok(())
-
    }
-

-
    pub fn bullet_point(&mut self, text: String) -> Result<(), LogError> {
-
        self.write(&text)?;
-
        self.write("\n")?;
-
        Ok(())
-
    }
-

    pub fn writeln(&mut self, text: &str) -> Result<(), LogError> {
+
        self.write("[")?;
+
        self.write(&now()?)?;
+
        self.write("] ")?;
        self.write(text)?;
        self.write("\n")?;
        Ok(())
    }

-
    pub fn fenced(&mut self, msg: &str, data: &[u8]) -> Result<(), LogError> {
-
        const FENCED_BLOCK: &str = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
-
        self.h3(msg)?;
-
        self.write(FENCED_BLOCK)?;
-
        if !data.is_empty() {
-
            let text = String::from_utf8_lossy(data);
-
            self.write(&text)?;
-
            if !text.ends_with('\n') {
-
                self.write("\n")?;
-
            }
-
        }
-
        self.write(FENCED_BLOCK)?;
-
        self.write("\n")?;
-

-
        Ok(())
-
    }
-

    fn write(&mut self, msg: &str) -> Result<(), LogError> {
        self.file
            .write_all(msg.as_bytes())
@@ -80,6 +41,13 @@ impl AdminLog {
    }
}

+
fn now() -> Result<String, LogError> {
+
    let fmt = format_description!("[year]-[month]-[day] [hour]:[minute]:[second]Z");
+
    OffsetDateTime::now_utc()
+
        .format(fmt)
+
        .map_err(LogError::TimeFormat)
+
}
+

#[derive(Debug, thiserror::Error)]
pub enum LogError {
    #[error("failed to open log file {0}")]
@@ -87,4 +55,7 @@ pub enum LogError {

    #[error("failed to write to log file {0}")]
    WriteLogFile(PathBuf, #[source] std::io::Error),
+

+
    #[error("failed to format time stamp")]
+
    TimeFormat(#[source] time::error::Format),
}