diff options
author | Michael Klishin <michael@clojurewerkz.org> | 2021-12-02 19:24:24 +0300 |
---|---|---|
committer | Michael Klishin <michael@clojurewerkz.org> | 2021-12-02 19:24:24 +0300 |
commit | 5cca0241078adb58f4b4bda5aaa639f303d0edd3 (patch) | |
tree | c2fa69eac00ffc297651a8673a9e394d3f70074e | |
parent | c5033b0cefd67715d840dcf04098d99d4dba1e37 (diff) | |
download | rabbitmq-server-git-5cca0241078adb58f4b4bda5aaa639f303d0edd3.tar.gz |
More log rotation date spec parser improvements
Note that Lager itself doesn't handle certain combinations:
* $W0H45 is fine
* $W0D1H45 fails with an error
but hopefully what we have now should be enough for
a minimalistic built-in log rotation feature.
-rw-r--r-- | deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_logger_std_h.erl | 26 | ||||
-rw-r--r-- | deps/rabbit/apps/rabbitmq_prelaunch/test/rabbit_logger_std_h_SUITE.erl | 14 |
2 files changed, 38 insertions, 2 deletions
diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_logger_std_h.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_logger_std_h.erl index 7b556aeb9f..4b8c43904a 100644 --- a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_logger_std_h.erl +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_logger_std_h.erl @@ -29,7 +29,7 @@ io:put_chars(DEVICE, DATA) end). --export([parse_date_spec/1, parse_day_of_week/2, parse_day_of_month/2, parse_hour/2]). +-export([parse_date_spec/1, parse_day_of_week/2, parse_day_of_month/2, parse_hour/2, parse_minute/2]). -else. -define(io_put_chars(DEVICE, DATA), io:put_chars(DEVICE, DATA)). -endif. @@ -610,6 +610,22 @@ parse_date_spec([$$, $D, D1 | Rest], Acc0) when D1 >= $0, D1 =< $9 -> parse_date_spec([$D, D1 | Rest], Acc0) when D1 >= $0, D1 =< $9 -> Acc = parse_hour([D1], Acc0#{hour => 0}), parse_date_spec(Rest, Acc); +%% $H23 +parse_date_spec([$$, $H, H1, H2 | Rest], Acc0) when H1 >= $0, H1 =< $9, H2 >= $0, H2 =< $9 -> + Acc = parse_minute([H1, H2], Acc0#{every => day, hour => 0}), + parse_date_spec(Rest, Acc); +%% H23 +parse_date_spec([$H, H1, H2 | Rest], Acc0) when H1 >= $0, H1 =< $9, H2 >= $0, H2 =< $9 -> + Acc = parse_minute([H1, H2], Acc0#{hour => 0}), + parse_date_spec(Rest, Acc); +%% $H0 +parse_date_spec([$$, $H, H1 | Rest], Acc0) when H1 >= $0, H1 =< $9 -> + Acc = parse_minute([H1], Acc0#{every => day, hour => 0}), + parse_date_spec(Rest, Acc); +%% H0 +parse_date_spec([$H, H1 | Rest], Acc0) when H1 >= $0, H1 =< $9 -> + Acc = parse_minute([H1], Acc0#{hour => 0}), + parse_date_spec(Rest, Acc); %% $W0 parse_date_spec([$$, $W, W | Rest], Acc0) when W >= $0, W =< $6 -> Acc = parse_day_of_week([W], Acc0#{every => week, hour => 0}), @@ -626,6 +642,14 @@ parse_date_spec(Input, error) -> io:format(standard_error, "Failed to parse rotation date spec: ~p (error)~n", [Input]), error. +parse_minute("", Acc) -> + Acc; +parse_minute(Input, Acc) -> + case string_to_int_within_range(Input, 0, 59) of + {Val, _Rest} -> Acc#{minute => Val}; + error -> error + end. + parse_hour("", Acc) -> Acc; parse_hour(Input, Acc) -> diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/test/rabbit_logger_std_h_SUITE.erl b/deps/rabbit/apps/rabbitmq_prelaunch/test/rabbit_logger_std_h_SUITE.erl index 05a439ede7..0ffac70f65 100644 --- a/deps/rabbit/apps/rabbitmq_prelaunch/test/rabbit_logger_std_h_SUITE.erl +++ b/deps/rabbit/apps/rabbitmq_prelaunch/test/rabbit_logger_std_h_SUITE.erl @@ -21,7 +21,8 @@ groups() -> parse_date_spec_case2, parse_date_spec_case3, parse_date_spec_case4, - parse_date_spec_case5 + parse_date_spec_case5, + parse_date_spec_case6 ]} ]. @@ -250,3 +251,14 @@ parse_date_spec_case5(_) -> ?assertEqual( error, rabbit_logger_std_h:parse_date_spec("$D99")). + +parse_date_spec_case6(_) -> + ?assertEqual( + #{every => day, hour => 0, minute => 30}, + rabbit_logger_std_h:parse_date_spec("$H30")), + ?assertEqual( + #{every => day, hour => 0, minute => 3}, + rabbit_logger_std_h:parse_date_spec("$H3")), + ?assertEqual( + #{day_of_week => 0,every => week,hour => 0, minute => 30}, + rabbit_logger_std_h:parse_date_spec("$W0H30")). |