use env_logger::Builder;
use std::io::Write;
pub fn init_logger() -> Builder {
let mut builder = Builder::from_default_env();
builder.target(env_logger::Target::Stdout);
let log_level = get_log_level();
log::debug!("Setting log level to {:?}", log_level);
builder.filter(None, log_level);
builder.write_style(env_logger::WriteStyle::Always);
builder.format(|buf, record| match record.level().as_str() {
"DEBUG" => writeln!(buf, "::debug :: {}", record.args()),
"WARN" => writeln!(buf, "::warning :: {}", record.args()),
"ERROR" => {
writeln!(buf, "::error :: {}", record.args())
}
_ => writeln!(buf, "{}", record.args()),
});
builder
}
fn get_log_level() -> log::LevelFilter {
if std::env::var("DEBUG").is_ok() || std::env::var("RUNNER_DEBUG").is_ok() {
log::LevelFilter::Debug
} else {
log::LevelFilter::Info
}
}
#[macro_export(local_inner_macros)]
macro_rules! errorf {
(file: $file:expr, line: $line:expr, column: $column:expr, $msg:tt) => {
::log::log!(::log::Level::Info, "::error file={},line={},col={} :: {}", $file, $line, $column, $msg)
};
($($arg:tt)+) => (::log::log!($crate::Level::Error, $($arg)+))
}
#[macro_export(local_inner_macros)]
macro_rules! group {
($dst:expr $(,)?) => {
::log::log!(log::Level::Info, "::group::{}", $dst)
};
}
#[macro_export(local_inner_macros)]
macro_rules! groupend {
() => {
::log::log!(log::Level::Info, "::endgroup::")
};
}
#[macro_export(local_inner_macros)]
macro_rules! setoutput {
($($arg:tt)+) => {
{
use std::io::Write;
let output = ::std::format!("::set-output name={}::{}", $($arg)+);
#[cfg(feature = "log")]
{
::log::log!(::log::Level::Info, "{}", output);
}
let output_file = std::env::var("GITHUB_OUTPUT").unwrap_or_else(|_| "/tmp/github_actions.env".to_string());
let mut file = std::fs::OpenOptions::new()
.create(true)
.append(true)
.open(output_file)
.unwrap();
::std::writeln!(file, "{}", output).unwrap();
}
}
}