jito_restaking_cli/
log.rs

1use std::io::Write;
2
3use chrono::Local;
4use env_logger::{
5    fmt::{Color, Formatter, Style, StyledValue},
6    Env,
7};
8use log::Record;
9use solana_sdk::{bs58, instruction::Instruction};
10pub fn init_logger() {
11    env_logger::Builder::from_env(Env::default().default_filter_or("info"))
12        .format(format_log_message)
13        .init();
14}
15
16fn format_log_message(buf: &mut Formatter, record: &Record) -> std::io::Result<()> {
17    let mut style = buf.style();
18    let level = colored_level(&mut style, record.level());
19
20    let timestamp = Local::now().format("%Y-%m-%d %H:%M:%S%.3f");
21
22    writeln!(
23        buf,
24        "[{} {} {}] {}",
25        timestamp,
26        level,
27        record.target(),
28        record.args()
29    )
30}
31
32fn colored_level(style: &mut Style, level: log::Level) -> StyledValue<&'static str> {
33    match level {
34        log::Level::Trace => style.set_color(Color::Magenta).value("TRACE"),
35        log::Level::Debug => style.set_color(Color::Blue).value("DEBUG"),
36        log::Level::Info => style.set_color(Color::Green).value("INFO "),
37        log::Level::Warn => style.set_color(Color::Yellow).value("WARN "),
38        log::Level::Error => style.set_color(Color::Red).value("ERROR"),
39    }
40}
41
42pub(crate) fn print_base58_tx(ixs: &[Instruction]) {
43    ixs.iter().for_each(|ix| {
44        log::info!("\n------ IX ------\n");
45
46        println!("{}\n", ix.program_id);
47
48        ix.accounts.iter().for_each(|account| {
49            let pubkey = format!("{}", account.pubkey);
50            let writable = if account.is_writable { "W" } else { "" };
51            let signer = if account.is_signer { "S" } else { "" };
52
53            println!("{:<44} {:>2} {:>1}", pubkey, writable, signer);
54        });
55
56        println!("\n");
57
58        let base58_string = bs58::encode(&ix.data).into_string();
59        println!("{}\n", base58_string);
60    });
61}