ghactions_core/
logging.rs1use env_logger::Builder;
3use std::env;
4use std::io::Write;
5
6pub fn init_logger() -> Builder {
10 let mut builder = Builder::from_default_env();
11
12 builder.target(env_logger::Target::Stdout);
14
15 builder.filter(None, get_log_level());
17 builder.write_style(env_logger::WriteStyle::Always);
18
19 builder.format(|buf, record| match record.level().as_str() {
21 "DEBUG" => writeln!(buf, "::debug :: {}", record.args()),
22 "WARN" => writeln!(buf, "::warning :: {}", record.args()),
23 "ERROR" => {
24 writeln!(buf, "::error :: {}", record.args())
25 }
26 _ => writeln!(buf, "{}", record.args()),
27 });
28
29 builder
30}
31
32fn get_log_level() -> log::LevelFilter {
34 match env::var("DEBUG") {
36 Ok(_value) => return log::LevelFilter::Debug,
37 Err(_err) => (),
38 }
39 match env::var("ACTIONS_RUNNER_DEBUG") {
41 Ok(_value) => return log::LevelFilter::Debug,
42 Err(_err) => (),
43 };
44
45 log::LevelFilter::Info
46}
47
48#[macro_export(local_inner_macros)]
65macro_rules! errorf {
66 (file: $file:expr, line: $line:expr, column: $column:expr, $msg:tt) => {
68 ::log::log!(::log::Level::Info, "::error file={},line={},col={} :: {}", $file, $line, $column, $msg)
69 };
70 ($($arg:tt)+) => (::log::log!($crate::Level::Error, $($arg)+))
72}
73
74#[macro_export(local_inner_macros)]
86macro_rules! group {
87 ($dst:expr $(,)?) => {
89 ::log::log!(log::Level::Info, "::group::{}", $dst)
90 };
91}
92
93#[macro_export(local_inner_macros)]
106macro_rules! groupend {
107 () => {
109 ::log::log!(log::Level::Info, "::endgroup::")
110 };
111}
112
113#[macro_export(local_inner_macros)]
125macro_rules! setoutput {
126 ($($arg:tt)+) => {
128 {
129 use std::io::Write;
130 let output = ::std::format!("::set-output name={}::{}", $($arg)+);
131 #[cfg(feature = "log")]
132 {
133 ::log::log!(::log::Level::Info, "{}", output);
134 }
135
136 let output_file = std::env::var("GITHUB_OUTPUT").unwrap_or_else(|_| "/tmp/github_actions.env".to_string());
137 let mut file = std::fs::OpenOptions::new()
139 .create(true)
140 .append(true)
141 .open(output_file)
142 .unwrap();
143 ::std::writeln!(file, "{}", output).unwrap();
145 }
146 }
147}