adding color to logs
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
use chrono::Local;
|
||||
use env_logger::Builder;
|
||||
use log::kv::{Error, Key, Value, VisitSource};
|
||||
use owo_colors::OwoColorize;
|
||||
use std::io::Write;
|
||||
|
||||
/// Struct for visiting key-value pairs and formatting them as logfmt.
|
||||
@ -20,6 +21,7 @@ pub struct LoggerBuilder {
|
||||
skip_messages: Vec<String>,
|
||||
include_date: bool,
|
||||
include_target: bool,
|
||||
use_color: bool,
|
||||
}
|
||||
|
||||
impl LoggerBuilder {
|
||||
@ -29,6 +31,7 @@ impl LoggerBuilder {
|
||||
skip_messages: vec![],
|
||||
include_date: true,
|
||||
include_target: true,
|
||||
use_color: true,
|
||||
}
|
||||
}
|
||||
|
||||
@ -50,6 +53,12 @@ impl LoggerBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
/// Enables or disables the use of color in logs.
|
||||
pub fn use_color(mut self, use_color: bool) -> Self {
|
||||
self.use_color = use_color;
|
||||
self
|
||||
}
|
||||
|
||||
/// Formats a log record into a string based on the configuration.
|
||||
fn format_log(&self, record: &log::Record) -> Option<String> {
|
||||
let msg = record.args().to_string();
|
||||
@ -67,11 +76,18 @@ impl LoggerBuilder {
|
||||
));
|
||||
}
|
||||
|
||||
log.push_str(&format!(
|
||||
"level=\"{}\" msg=\"{}\"",
|
||||
record.level().as_str().to_lowercase(),
|
||||
msg
|
||||
));
|
||||
let level_str = if self.use_color {
|
||||
match record.level() {
|
||||
log::Level::Error => "error".red().to_string(),
|
||||
log::Level::Warn => "warn".yellow().to_string(),
|
||||
log::Level::Info => "info".green().to_string(),
|
||||
log::Level::Debug => "debug".blue().to_string(),
|
||||
log::Level::Trace => "trace".cyan().to_string(),
|
||||
}
|
||||
} else {
|
||||
record.level().as_str().to_lowercase()
|
||||
};
|
||||
log.push_str(&format!("level=\"{}\" msg=\"{}\"", level_str, msg));
|
||||
|
||||
let _ = record
|
||||
.key_values()
|
||||
@ -112,7 +128,10 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_format_log_with_date_and_target() {
|
||||
let builder = LoggerBuilder::new().include_date(true).include_target(true);
|
||||
let builder = LoggerBuilder::new()
|
||||
.include_date(true)
|
||||
.include_target(true)
|
||||
.use_color(false);
|
||||
|
||||
let record = Record::builder()
|
||||
.args(format_args!("Test message"))
|
||||
@ -133,7 +152,8 @@ mod tests {
|
||||
fn test_format_log_without_date_and_target() {
|
||||
let builder = LoggerBuilder::new()
|
||||
.include_date(false)
|
||||
.include_target(false);
|
||||
.include_target(false)
|
||||
.use_color(false);
|
||||
|
||||
let record = Record::builder()
|
||||
.args(format_args!("Another test message"))
|
||||
|
Reference in New Issue
Block a user