mirror of
https://github.com/correl/rebar.git
synced 2024-11-27 11:09:55 +00:00
Add colored logs
This commit is contained in:
parent
b693c23663
commit
c01cf5902b
4 changed files with 56 additions and 8 deletions
1
THANKS
1
THANKS
|
@ -127,3 +127,4 @@ alisdair sullivan
|
||||||
Alexander Verbitsky
|
Alexander Verbitsky
|
||||||
Andras Horvath
|
Andras Horvath
|
||||||
Drew Varner
|
Drew Varner
|
||||||
|
Andrey Teplyashin
|
||||||
|
|
|
@ -54,6 +54,9 @@
|
||||||
%% Default log level
|
%% Default log level
|
||||||
{log_level, warn},
|
{log_level, warn},
|
||||||
|
|
||||||
|
%% Log colored
|
||||||
|
{log_colored, true},
|
||||||
|
|
||||||
%% any_dir processing modules
|
%% any_dir processing modules
|
||||||
{any_dir_modules, [
|
{any_dir_modules, [
|
||||||
rebar_require_vsn,
|
rebar_require_vsn,
|
||||||
|
|
|
@ -14,23 +14,40 @@ run(_Dir) ->
|
||||||
SharedExpected = "==> logging_rt \\(compile\\)",
|
SharedExpected = "==> logging_rt \\(compile\\)",
|
||||||
%% provoke ERROR due to an invalid app file
|
%% provoke ERROR due to an invalid app file
|
||||||
retest:log(info, "Check 'compile' failure output~n"),
|
retest:log(info, "Check 'compile' failure output~n"),
|
||||||
|
{ERROR, WARN, INFO, DEBUG} =
|
||||||
|
case application:get_env(rebar, log_colored) of
|
||||||
|
{ok, true} ->
|
||||||
|
{
|
||||||
|
"\\e\\[1m\\e\\[31mERROR: \\e\\[0m",
|
||||||
|
"\\e\\[33mWARN: \\e\\[0m",
|
||||||
|
"\\e\\[32mINFO: \\e\\[0m",
|
||||||
|
"\\e\\[34mDEBUG: \\e\\[0m"
|
||||||
|
};
|
||||||
|
_ ->
|
||||||
|
{
|
||||||
|
"ERROR: ",
|
||||||
|
"WARN: ",
|
||||||
|
"INFO: ",
|
||||||
|
"DEBUG: "
|
||||||
|
}
|
||||||
|
end,
|
||||||
ok = check_output("./rebar compile -q", should_fail,
|
ok = check_output("./rebar compile -q", should_fail,
|
||||||
[SharedExpected, "ERROR: "],
|
[SharedExpected, ERROR],
|
||||||
["WARN: ", "INFO: ", "DEBUG: "]),
|
[WARN, INFO, DEBUG]),
|
||||||
%% fix bad app file
|
%% fix bad app file
|
||||||
ok = file:write_file(?APP_FILE, app(logging, [])),
|
ok = file:write_file(?APP_FILE, app(logging, [])),
|
||||||
retest:log(info, "Check 'compile' success output~n"),
|
retest:log(info, "Check 'compile' success output~n"),
|
||||||
ok = check_output("./rebar compile", should_succeed,
|
ok = check_output("./rebar compile", should_succeed,
|
||||||
[SharedExpected],
|
[SharedExpected],
|
||||||
["ERROR: ", "WARN: ", "INFO: ", "DEBUG: "]),
|
[ERROR, WARN, INFO, DEBUG]),
|
||||||
retest:log(info, "Check 'compile -v' success output~n"),
|
retest:log(info, "Check 'compile -v' success output~n"),
|
||||||
ok = check_output("./rebar compile -v", should_succeed,
|
ok = check_output("./rebar compile -v", should_succeed,
|
||||||
[SharedExpected],
|
[SharedExpected],
|
||||||
["ERROR: ", "INFO: ", "DEBUG: "]),
|
[ERROR, INFO, DEBUG]),
|
||||||
retest:log(info, "Check 'compile -vv' success output~n"),
|
retest:log(info, "Check 'compile -vv' success output~n"),
|
||||||
ok = check_output("./rebar compile -vv", should_succeed,
|
ok = check_output("./rebar compile -vv", should_succeed,
|
||||||
[SharedExpected, "DEBUG: "],
|
[SharedExpected, DEBUG],
|
||||||
["ERROR: ", "INFO: "]),
|
[ERROR, INFO]),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
check_output(Cmd, FailureMode, Expected, Unexpected) ->
|
check_output(Cmd, FailureMode, Expected, Unexpected) ->
|
||||||
|
@ -47,7 +64,7 @@ check_output(Cmd, FailureMode, Expected, Unexpected) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
check_output1(Cmd, Captured, Expected, Unexpected) ->
|
check_output1(Cmd, Captured, Expected, Unexpected) ->
|
||||||
ReOpts = [{capture, all, list}],
|
ReOpts = [{capture, all, list}, unicode],
|
||||||
ExMatches =
|
ExMatches =
|
||||||
lists:zf(
|
lists:zf(
|
||||||
fun(Pattern) ->
|
fun(Pattern) ->
|
||||||
|
|
|
@ -60,9 +60,10 @@ log(Level, Str, Args) ->
|
||||||
|
|
||||||
log(Device, Level, Str, Args) ->
|
log(Device, Level, Str, Args) ->
|
||||||
{ok, LogLevel} = application:get_env(rebar, log_level),
|
{ok, LogLevel} = application:get_env(rebar, log_level),
|
||||||
|
{ok, LogColored} = application:get_env(rebar, log_colored),
|
||||||
case should_log(LogLevel, Level) of
|
case should_log(LogLevel, Level) of
|
||||||
true ->
|
true ->
|
||||||
io:format(Device, log_prefix(Level) ++ Str, Args);
|
io:format(Device, log_prefix(Level, LogColored) ++ Str, Args);
|
||||||
false ->
|
false ->
|
||||||
ok
|
ok
|
||||||
end.
|
end.
|
||||||
|
@ -90,7 +91,33 @@ should_log(error, error) -> true;
|
||||||
should_log(error, _) -> false;
|
should_log(error, _) -> false;
|
||||||
should_log(_, _) -> false.
|
should_log(_, _) -> false.
|
||||||
|
|
||||||
|
log_prefix(Level, _Colored = false) ->
|
||||||
|
log_prefix(Level);
|
||||||
|
log_prefix(Level, _Colored = true) ->
|
||||||
|
color_from_level(Level) ++ log_prefix(Level) ++ reset_color().
|
||||||
|
|
||||||
log_prefix(debug) -> "DEBUG: ";
|
log_prefix(debug) -> "DEBUG: ";
|
||||||
log_prefix(info) -> "INFO: ";
|
log_prefix(info) -> "INFO: ";
|
||||||
log_prefix(warn) -> "WARN: ";
|
log_prefix(warn) -> "WARN: ";
|
||||||
log_prefix(error) -> "ERROR: ".
|
log_prefix(error) -> "ERROR: ".
|
||||||
|
|
||||||
|
color_from_level(debug) ->
|
||||||
|
color_foreground(blue);
|
||||||
|
color_from_level(info) ->
|
||||||
|
color_foreground(green);
|
||||||
|
color_from_level(warn) ->
|
||||||
|
color_foreground(yellow);
|
||||||
|
color_from_level(error) ->
|
||||||
|
color_bold() ++ color_foreground(red).
|
||||||
|
|
||||||
|
color_foreground(black) -> "\e[30m";
|
||||||
|
color_foreground(red) -> "\e[31m";
|
||||||
|
color_foreground(green) -> "\e[32m";
|
||||||
|
color_foreground(yellow) -> "\e[33m";
|
||||||
|
color_foreground(blue) -> "\e[34m";
|
||||||
|
color_foreground(magenta) -> "\e[35m";
|
||||||
|
color_foreground(cyan) -> "\e[36m";
|
||||||
|
color_foreground(white) -> "\e[37m".
|
||||||
|
|
||||||
|
color_bold() -> "\e[1m".
|
||||||
|
reset_color() -> "\e[0m".
|
||||||
|
|
Loading…
Reference in a new issue