tracel_xtask/
logging.rs

1use std::io::Write;
2
3/// Initialise and create a `env_logger::Builder` which follows the
4/// GitHub Actions logging syntax when running on CI.
5pub fn init_logger() -> env_logger::Builder {
6    let mut builder = env_logger::Builder::from_default_env();
7    builder.target(env_logger::Target::Stdout);
8
9    // Find and setup the correct log level
10    builder.filter(None, get_log_level());
11    builder.write_style(env_logger::WriteStyle::Always);
12
13    // Custom Formatter for Github Actions
14    if std::env::var("CI").is_ok() {
15        builder.format(|buf, record| match record.level().as_str() {
16            "DEBUG" => writeln!(buf, "::debug:: {}", record.args()),
17            "WARN" => writeln!(buf, "::warning:: {}", record.args()),
18            "ERROR" => {
19                writeln!(buf, "::error:: {}", record.args())
20            }
21            _ => writeln!(buf, "{}", record.args()),
22        });
23    }
24
25    builder
26}
27
28/// Determine the LogLevel for the logger
29fn get_log_level() -> log::LevelFilter {
30    // DEBUG
31    match std::env::var("DEBUG") {
32        Ok(_value) => return log::LevelFilter::Debug,
33        Err(_err) => (),
34    }
35    // ACTIONS_RUNNER_DEBUG
36    match std::env::var("ACTIONS_RUNNER_DEBUG") {
37        Ok(_value) => return log::LevelFilter::Debug,
38        Err(_err) => (),
39    };
40
41    log::LevelFilter::Info
42}
43
44/// Group Macro
45#[macro_export]
46macro_rules! group {
47    // group!()
48    ($($arg:tt)*) => {
49        let title = format!($($arg)*);
50        if std::env::var("CI").is_ok() {
51            println!("::group::{}", title)
52        } else {
53            log!(log::Level::Info, "{}", title)
54        }
55    };
56}
57
58#[macro_export]
59macro_rules! group_info {
60    // group_info!()
61    ($($arg:tt)*) => {
62        let title = format!($($arg)*);
63        if std::env::var("CI").is_ok() {
64            println!("{}", title)
65        } else {
66            log!(log::Level::Info, "{}", title)
67        }
68    };
69}
70
71/// End Group Macro
72#[macro_export]
73macro_rules! endgroup {
74    // endgroup!()
75    () => {
76        if std::env::var("CI").is_ok() {
77            println!("::endgroup::")
78        }
79    };
80}