1use std::io::Write;
2
3pub 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 builder.filter(None, get_log_level());
11 builder.write_style(env_logger::WriteStyle::Always);
12
13 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
28fn get_log_level() -> log::LevelFilter {
30 match std::env::var("DEBUG") {
32 Ok(_value) => return log::LevelFilter::Debug,
33 Err(_err) => (),
34 }
35 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#[macro_export]
46macro_rules! group {
47 ($($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 ($($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#[macro_export]
72macro_rules! group_error {
73 ($($arg:tt)*) => {
75 let title = format!($($arg)*);
76 if std::env::var("CI").is_ok() {
77 eprintln!("{}", title)
78 } else {
79 log!(log::Level::Error, "{}", title)
80 }
81 };
82}
83
84#[macro_export]
86macro_rules! endgroup {
87 () => {
89 if std::env::var("CI").is_ok() {
90 println!("::endgroup::")
91 }
92 };
93}