ghactions_core/
logging.rs1use env_logger::Builder;
3use std::io::Write;
4
5pub fn init_logger() -> Builder {
9 let mut builder = Builder::from_default_env();
10
11 builder.target(env_logger::Target::Stdout);
13
14 let log_level = get_log_level();
16 log::debug!("Setting log level to {:?}", log_level);
17
18 builder.filter(None, log_level);
19 builder.write_style(env_logger::WriteStyle::Always);
20
21 builder.format(|buf, record| match record.level().as_str() {
23 "DEBUG" => writeln!(buf, "::debug :: {}", record.args()),
24 "WARN" => writeln!(buf, "::warning :: {}", record.args()),
25 "ERROR" => {
26 writeln!(buf, "::error :: {}", record.args())
27 }
28 _ => writeln!(buf, "{}", record.args()),
29 });
30
31 builder
32}
33
34fn get_log_level() -> log::LevelFilter {
39 if std::env::var("DEBUG").is_ok() || std::env::var("RUNNER_DEBUG").is_ok() {
40 log::LevelFilter::Debug
41 } else {
42 log::LevelFilter::Info
43 }
44}
45
46#[macro_export(local_inner_macros)]
63macro_rules! errorf {
64 (file: $file:expr, line: $line:expr, column: $column:expr, $msg:tt) => {
66 ::log::log!(::log::Level::Info, "::error file={},line={},col={} :: {}", $file, $line, $column, $msg)
67 };
68 ($($arg:tt)+) => (::log::log!($crate::Level::Error, $($arg)+))
70}
71
72#[macro_export(local_inner_macros)]
84macro_rules! group {
85 ($dst:expr $(,)?) => {
87 ::log::log!(log::Level::Info, "::group::{}", $dst)
88 };
89}
90
91#[macro_export(local_inner_macros)]
103macro_rules! groupend {
104 () => {
106 ::log::log!(log::Level::Info, "::endgroup::")
107 };
108}
109
110#[macro_export(local_inner_macros)]
122macro_rules! setoutput {
123 ($($arg:tt)+) => {
125 {
126 use std::io::Write;
127 let output = ::std::format!("::set-output name={}::{}", $($arg)+);
128 #[cfg(feature = "log")]
129 {
130 ::log::log!(::log::Level::Info, "{}", output);
131 }
132
133 let output_file = std::env::var("GITHUB_OUTPUT").unwrap_or_else(|_| "/tmp/github_actions.env".to_string());
134 let mut file = std::fs::OpenOptions::new()
136 .create(true)
137 .append(true)
138 .open(output_file)
139 .unwrap();
140 ::std::writeln!(file, "{}", output).unwrap();
142 }
143 }
144}