You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
multihook/src/utils/logging.rs

57 lines
1.8 KiB
Rust

use std::str::FromStr;
use chrono::Local;
use colored::*;
use log::{Level, LevelFilter};
/// Initializes the env_logger with a custom format
/// that also logs the thread names
pub fn init_logger() {
fern::Dispatch::new()
.format(|out, message, record| {
let color = get_level_style(record.level());
let mut target = record.target().to_string();
target.truncate(39);
out.finish(format_args!(
"{:<40}| {} {}: {}",
target.dimmed().italic(),
Local::now().format("%Y-%m-%dT%H:%M:%S"),
record
.level()
.to_string()
.to_lowercase()
.as_str()
.color(color),
message
))
})
.level(
std::env::var("RUST_LOG")
.ok()
.and_then(|level| log::LevelFilter::from_str(&level).ok())
.unwrap_or(LevelFilter::Info),
)
.level_for("tokio", log::LevelFilter::Info)
.level_for("tracing", log::LevelFilter::Warn)
.level_for("rustls", log::LevelFilter::Warn)
.level_for("h2", log::LevelFilter::Warn)
.level_for("hyper", log::LevelFilter::Warn)
.level_for("tokio_util", log::LevelFilter::Warn)
.level_for("want", log::LevelFilter::Warn)
.level_for("mio", log::LevelFilter::Warn)
.chain(std::io::stdout())
.apply()
.expect("failed to init logger");
}
fn get_level_style(level: Level) -> colored::Color {
match level {
Level::Trace => colored::Color::Magenta,
Level::Debug => colored::Color::Blue,
Level::Info => colored::Color::Green,
Level::Warn => colored::Color::Yellow,
Level::Error => colored::Color::Red,
}
}