subgraph/utils/logger/
mod.rs1use env_logger::Env;
2use log::Level;
3use serde::{Deserialize, Serialize};
4use std::io::Write;
5use std::{fmt, str::FromStr};
6
7use crate::{cli_args::CliArgs, configuration::subgraph::SubGraphConfig};
8
9#[derive(Debug, Serialize, Deserialize, Clone)]
10#[serde(rename_all = "lowercase")]
11pub enum LogLevelEnum {
12 Error,
13 Warn,
14 Info,
15 Debug,
16 Trace,
17}
18
19impl fmt::Display for LogLevelEnum {
20 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21 let variant_str = match self {
22 LogLevelEnum::Error => "error",
23 LogLevelEnum::Warn => "warn",
24 LogLevelEnum::Info => "info",
25 LogLevelEnum::Debug => "debug",
26 LogLevelEnum::Trace => "trace",
27 };
28 write!(f, "{}", variant_str)
29 }
30}
31
32impl LogLevelEnum {
33 pub fn parse_log_level(log_level_enum: LogLevelEnum) -> Level {
34 match log_level_enum {
35 LogLevelEnum::Error => Level::Error,
36 LogLevelEnum::Warn => Level::Warn,
37 LogLevelEnum::Info => Level::Info,
38 LogLevelEnum::Debug => Level::Debug,
39 LogLevelEnum::Trace => Level::Trace,
40 }
41 }
42}
43
44pub struct Logger;
45impl Logger {
46 pub fn init(args: &CliArgs, subgraph_config: &SubGraphConfig) {
47 let log_level = match args.log_level.clone() {
48 Some(level) => {
49 let level_from_str = Level::from_str(&level);
50 match level_from_str {
51 Ok(level) => level,
52 Err(_) => panic!("Failed to get log level from args."),
53 }
54 }
55 None => match subgraph_config.clone().service.log_level {
56 Some(level) => LogLevelEnum::parse_log_level(level),
57 None => Level::Info,
58 },
59 };
60
61 env_logger::Builder::from_env(Env::default().default_filter_or(log_level.to_string()))
62 .format(|buf, record| {
63 let color = match record.level() {
65 log::Level::Error => "\x1b[31m", log::Level::Warn => "\x1b[33m", log::Level::Info => "\x1b[32m", log::Level::Debug => "\x1b[34m", log::Level::Trace => "\x1b[36m", };
71
72 let reset_color = "\x1b[0m";
74
75 writeln!(
77 buf,
78 "{}[{}]{} {}{}",
79 color,
80 record.level(),
81 reset_color,
82 record.args(),
83 reset_color
84 )
85 })
86 .init();
87 }
88}