summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorILYA Khlopotov <iilyak@apache.org>2020-07-20 11:37:30 -0700
committerILYA Khlopotov <iilyak@apache.org>2020-07-30 05:10:08 -0700
commite1b4259a9e0714fb78f740ee763dd12f84bbca1a (patch)
tree4e82b45226a8be5d89a46ef472c34790f49ab916
parent46cff24e68524caccf0a96ba02ace9b6b9767663 (diff)
downloadcouchdb-e1b4259a9e0714fb78f740ee763dd12f84bbca1a.tar.gz
Strip last_msg from logs
-rw-r--r--src/couch_log/src/couch_log_config.erl11
-rw-r--r--src/couch_log/src/couch_log_config_dyn.erl3
-rw-r--r--src/couch_log/src/couch_log_formatter.erl24
-rw-r--r--src/couch_log/src/couch_log_sup.erl2
-rw-r--r--src/couch_log/test/eunit/couch_log_config_test.erl37
-rw-r--r--src/couch_log/test/eunit/couch_log_formatter_test.erl114
6 files changed, 179 insertions, 12 deletions
diff --git a/src/couch_log/src/couch_log_config.erl b/src/couch_log/src/couch_log_config.erl
index 766d068a4..a7a469cc3 100644
--- a/src/couch_log/src/couch_log_config.erl
+++ b/src/couch_log/src/couch_log_config.erl
@@ -49,7 +49,8 @@ entries() ->
[
{level, "level", "info"},
{level_int, "level", "info"},
- {max_message_size, "max_message_size", "16000"}
+ {max_message_size, "max_message_size", "16000"},
+ {strip_last_msg, "strip_last_msg", "true"}
].
@@ -97,4 +98,10 @@ transform(max_message_size, SizeStr) ->
Size -> Size
catch _:_ ->
16000
- end. \ No newline at end of file
+ end;
+
+transform(strip_last_msg, "false") ->
+ false;
+
+transform(strip_last_msg, _) ->
+ true. \ No newline at end of file
diff --git a/src/couch_log/src/couch_log_config_dyn.erl b/src/couch_log/src/couch_log_config_dyn.erl
index f7541f61f..b39dcf2f5 100644
--- a/src/couch_log/src/couch_log_config_dyn.erl
+++ b/src/couch_log/src/couch_log_config_dyn.erl
@@ -25,4 +25,5 @@
get(level) -> info;
get(level_int) -> 2;
-get(max_message_size) -> 16000.
+get(max_message_size) -> 16000;
+get(strip_last_msg) -> true.
diff --git a/src/couch_log/src/couch_log_formatter.erl b/src/couch_log/src/couch_log_formatter.erl
index 4d81f184f..26997a8a6 100644
--- a/src/couch_log/src/couch_log_formatter.erl
+++ b/src/couch_log/src/couch_log_formatter.erl
@@ -68,7 +68,13 @@ format(Event) ->
do_format({error, _GL, {Pid, "** Generic server " ++ _, Args}}) ->
%% gen_server terminate
- [Name, LastMsg, State, Reason | Extra] = Args,
+ [Name, LastMsg0, State, Reason | Extra] = Args,
+ LastMsg = case couch_log_config:get(strip_last_msg) of
+ true ->
+ redacted;
+ false ->
+ LastMsg0
+ end,
MsgFmt = "gen_server ~w terminated with reason: ~s~n" ++
" last msg: ~p~n state: ~p~n extra: ~p",
MsgArgs = [Name, format_reason(Reason), LastMsg, State, Extra],
@@ -76,7 +82,13 @@ do_format({error, _GL, {Pid, "** Generic server " ++ _, Args}}) ->
do_format({error, _GL, {Pid, "** State machine " ++ _, Args}}) ->
%% gen_fsm terminate
- [Name, LastMsg, StateName, State, Reason | Extra] = Args,
+ [Name, LastMsg0, StateName, State, Reason | Extra] = Args,
+ LastMsg = case couch_log_config:get(strip_last_msg) of
+ true ->
+ redacted;
+ false ->
+ LastMsg0
+ end,
MsgFmt = "gen_fsm ~w in state ~w terminated with reason: ~s~n" ++
" last msg: ~p~n state: ~p~n extra: ~p",
MsgArgs = [Name, StateName, format_reason(Reason), LastMsg, State, Extra],
@@ -84,7 +96,13 @@ do_format({error, _GL, {Pid, "** State machine " ++ _, Args}}) ->
do_format({error, _GL, {Pid, "** gen_event handler" ++ _, Args}}) ->
%% gen_event handler terminate
- [ID, Name, LastMsg, State, Reason] = Args,
+ [ID, Name, LastMsg0, State, Reason] = Args,
+ LastMsg = case couch_log_config:get(strip_last_msg) of
+ true ->
+ redacted;
+ false ->
+ LastMsg0
+ end,
MsgFmt = "gen_event ~w installed in ~w terminated with reason: ~s~n" ++
" last msg: ~p~n state: ~p",
MsgArgs = [ID, Name, format_reason(Reason), LastMsg, State],
diff --git a/src/couch_log/src/couch_log_sup.erl b/src/couch_log/src/couch_log_sup.erl
index 6219a36e9..fc1ac7812 100644
--- a/src/couch_log/src/couch_log_sup.erl
+++ b/src/couch_log/src/couch_log_sup.erl
@@ -63,6 +63,8 @@ handle_config_change("log", Key, _, _, S) ->
couch_log_config:reconfigure();
"max_message_size" ->
couch_log_config:reconfigure();
+ "strip_last_msg" ->
+ couch_log_config:reconfigure();
_ ->
% Someone may have changed the config for
% the writer so we need to re-initialize.
diff --git a/src/couch_log/test/eunit/couch_log_config_test.erl b/src/couch_log/test/eunit/couch_log_config_test.erl
index c4677f37f..a4c4bcff2 100644
--- a/src/couch_log/test/eunit/couch_log_config_test.erl
+++ b/src/couch_log/test/eunit/couch_log_config_test.erl
@@ -25,7 +25,9 @@ couch_log_config_test_() ->
fun check_level/0,
fun check_max_message_size/0,
fun check_bad_level/0,
- fun check_bad_max_message_size/0
+ fun check_bad_max_message_size/0,
+ fun check_strip_last_msg/0,
+ fun check_bad_strip_last_msg/0
]
}.
@@ -108,3 +110,36 @@ check_bad_max_message_size() ->
couch_log_test_util:wait_for_config(),
?assertEqual(16000, couch_log_config:get(max_message_size))
end).
+
+
+check_strip_last_msg() ->
+ % Default is true
+ ?assertEqual(true, couch_log_config:get(strip_last_msg)),
+
+ couch_log_test_util:with_config_listener(fun() ->
+ config:set("log", "strip_last_msg", "false"),
+ couch_log_test_util:wait_for_config(),
+ ?assertEqual(false, couch_log_config:get(strip_last_msg)),
+
+ config:delete("log", "strip_last_msg"),
+ couch_log_test_util:wait_for_config(),
+ ?assertEqual(true, couch_log_config:get(strip_last_msg))
+ end).
+
+check_bad_strip_last_msg() ->
+ % Default is true
+ ?assertEqual(true, couch_log_config:get(strip_last_msg)),
+
+ couch_log_test_util:with_config_listener(fun() ->
+ config:set("log", "strip_last_msg", "false"),
+ couch_log_test_util:wait_for_config(),
+ ?assertEqual(false, couch_log_config:get(strip_last_msg)),
+
+ config:set("log", "strip_last_msg", "this is not a boolean"),
+ couch_log_test_util:wait_for_config(),
+ ?assertEqual(true, couch_log_config:get(strip_last_msg)),
+
+ config:delete("log", "strip_last_msg"),
+ couch_log_test_util:wait_for_config(),
+ ?assertEqual(true, couch_log_config:get(strip_last_msg))
+ end).
diff --git a/src/couch_log/test/eunit/couch_log_formatter_test.erl b/src/couch_log/test/eunit/couch_log_formatter_test.erl
index 795efcf29..24de346c6 100644
--- a/src/couch_log/test/eunit/couch_log_formatter_test.erl
+++ b/src/couch_log/test/eunit/couch_log_formatter_test.erl
@@ -81,7 +81,7 @@ gen_server_error_test() ->
do_matches(do_format(Event), [
"gen_server a_gen_server terminated",
"with reason: some_reason",
- "last msg: {foo,bar}",
+ "last msg: redacted",
"state: server_state",
"extra: \\[\\]"
]).
@@ -108,7 +108,7 @@ gen_server_error_with_extra_args_test() ->
do_matches(do_format(Event), [
"gen_server a_gen_server terminated",
"with reason: some_reason",
- "last msg: {foo,bar}",
+ "last msg: redacted",
"state: server_state",
"extra: \\[sad,args\\]"
]).
@@ -135,7 +135,7 @@ gen_fsm_error_test() ->
do_matches(do_format(Event), [
"gen_fsm a_gen_fsm in state state_name",
"with reason: barf",
- "last msg: {ohai,there}",
+ "last msg: redacted",
"state: curr_state",
"extra: \\[\\]"
]).
@@ -162,7 +162,7 @@ gen_fsm_error_with_extra_args_test() ->
do_matches(do_format(Event), [
"gen_fsm a_gen_fsm in state state_name",
"with reason: barf",
- "last msg: {ohai,there}",
+ "last msg: redacted",
"state: curr_state",
"extra: \\[sad,args\\]"
]).
@@ -195,7 +195,7 @@ gen_event_error_test() ->
do_matches(do_format(Event), [
"gen_event handler_id installed in a_gen_event",
"reason: barf",
- "last msg: {ohai,there}",
+ "last msg: redacted",
"state: curr_state"
]).
@@ -850,6 +850,110 @@ coverage_test() ->
})
).
+gen_server_error_with_last_msg_test() ->
+ Pid = self(),
+ Event = {
+ error,
+ erlang:group_leader(),
+ {
+ Pid,
+ "** Generic server and some stuff",
+ [a_gen_server, {foo, bar}, server_state, some_reason]
+ }
+ },
+ ?assertMatch(
+ #log_entry{
+ level = error,
+ pid = Pid
+ },
+ do_format(Event)
+ ),
+ with_last(fun() ->
+ do_matches(do_format(Event), [
+ "gen_server a_gen_server terminated",
+ "with reason: some_reason",
+ "last msg: {foo,bar}",
+ "state: server_state",
+ "extra: \\[\\]"
+ ])
+ end).
+
+gen_event_error_with_last_msg_test() ->
+ Pid = self(),
+ Event = {
+ error,
+ erlang:group_leader(),
+ {
+ Pid,
+ "** gen_event handler did a thing",
+ [
+ handler_id,
+ a_gen_event,
+ {ohai,there},
+ curr_state,
+ barf
+ ]
+ }
+ },
+ ?assertMatch(
+ #log_entry{
+ level = error,
+ pid = Pid
+ },
+ do_format(Event)
+ ),
+ with_last(fun() ->
+ do_matches(do_format(Event), [
+ "gen_event handler_id installed in a_gen_event",
+ "reason: barf",
+ "last msg: {ohai,there}",
+ "state: curr_state"
+ ])
+ end).
+
+
+gen_fsm_error_with_last_msg_test() ->
+ Pid = self(),
+ Event = {
+ error,
+ erlang:group_leader(),
+ {
+ Pid,
+ "** State machine did a thing",
+ [a_gen_fsm, {ohai,there}, state_name, curr_state, barf]
+ }
+ },
+ ?assertMatch(
+ #log_entry{
+ level = error,
+ pid = Pid
+ },
+ do_format(Event)
+ ),
+ with_last(fun() ->
+ do_matches(do_format(Event), [
+ "gen_fsm a_gen_fsm in state state_name",
+ "with reason: barf",
+ "last msg: {ohai,there}",
+ "state: curr_state",
+ "extra: \\[\\]"
+ ])
+ end).
+
+
+with_last(Fun) ->
+ meck:new(couch_log_config_dyn, [passthrough]),
+ try
+ meck:expect(couch_log_config_dyn, get, fun(Case) ->
+ case Case of
+ strip_last_msg -> false;
+ Case -> meck:passthrough([Case])
+ end
+ end),
+ Fun()
+ after
+ meck:unload(couch_log_config_dyn)
+ end.
do_format(Event) ->
E = couch_log_formatter:format(Event),