Add colored logs

This commit is contained in:
Andrey Teplyashin 2014-11-09 14:04:05 +06:00
parent b693c23663
commit c01cf5902b
4 changed files with 56 additions and 8 deletions

1
THANKS
View file

@ -127,3 +127,4 @@ alisdair sullivan
Alexander Verbitsky Alexander Verbitsky
Andras Horvath Andras Horvath
Drew Varner Drew Varner
Andrey Teplyashin

View file

@ -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,

View file

@ -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) ->

View file

@ -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".