1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
use env_logger::fmt::Color; use log::{Level, LevelFilter}; use std::io::Write; pub fn init(verbose: u64, is_server: bool) { let mut builder = env_logger::Builder::new(); builder.format(move |buf, record| { let level_color = match record.level() { Level::Trace => Color::White, Level::Debug => Color::Blue, Level::Info => Color::Green, Level::Warn => Color::Yellow, Level::Error => Color::Red, }; let mut level_style = buf.style(); level_style.set_color(level_color); if is_server { if cfg!(debug_assertions) { writeln!( buf, "{level:5} {time} {file:>10}:{line:<4} {args}", level = level_style.value(record.level()), time = chrono::Utc::now().to_rfc3339(), file = &record.file().unwrap_or("____unknown")[4..], line = record.line().unwrap_or(0), args = record.args(), ) } else { writeln!( buf, "{level:5} {time} {args}", level = level_style.value(record.level()), time = chrono::Utc::now().to_rfc3339(), args = record.args(), ) } } else { writeln!( buf, "{level:5} {args}", level = level_style.value(record.level()), args = record.args(), ) } }); builder.filter( None, match verbose { 0 => LevelFilter::Info, 1 => LevelFilter::Debug, _ => LevelFilter::Trace, }, ); builder.write_style(env_logger::WriteStyle::Auto); builder.init(); }