Merge branch 'color_in_logs' of https://github.com/platinumthinker/rebar into platinumthinker-color_in_logs

Conflicts:
	THANKS
This commit is contained in:
Fred Hebert 2014-11-21 09:46:10 -05:00
commit 733d3771fa
4 changed files with 67 additions and 11 deletions

1
THANKS
View file

@ -129,3 +129,4 @@ Andras Horvath
Drew Varner Drew Varner
Roberto Aloi Roberto Aloi
Luis Rascao Luis Rascao
Andrey Teplyashin

View file

@ -56,6 +56,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

@ -40,23 +40,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) ->
@ -73,7 +90,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

@ -50,19 +50,28 @@ init(Config) ->
?WARN_LEVEL -> set_level(warn); ?WARN_LEVEL -> set_level(warn);
?INFO_LEVEL -> set_level(info); ?INFO_LEVEL -> set_level(info);
?DEBUG_LEVEL -> set_level(debug) ?DEBUG_LEVEL -> set_level(debug)
end. end,
LogColored = rebar_config:get_global(Config, log_colored, true),
set_log_colored(LogColored).
set_level(Level) -> set_level(Level) ->
ok = application:set_env(rebar, log_level, Level). erlang:put(rebar_log_level, Level).
set_log_colored(true) ->
erlang:put(rebar_log_colored, true);
set_log_colored(_LogColored) ->
erlang:put(rebar_log_colored, false).
log(Level, Str, Args) -> log(Level, Str, Args) ->
log(standard_io, Level, Str, Args). log(standard_io, Level, Str, Args).
log(Device, Level, Str, Args) -> log(Device, Level, Str, Args) ->
{ok, LogLevel} = application:get_env(rebar, log_level), LogLevel = erlang:get(rebar_log_level),
LogColored = erlang:get(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 +99,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".