emqx_logger_SUITE.erl 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. %%--------------------------------------------------------------------
  2. %% Copyright (c) 2019-2024 EMQ Technologies Co., Ltd. All Rights Reserved.
  3. %%
  4. %% Licensed under the Apache License, Version 2.0 (the "License");
  5. %% you may not use this file except in compliance with the License.
  6. %% You may obtain a copy of the License at
  7. %%
  8. %% http://www.apache.org/licenses/LICENSE-2.0
  9. %%
  10. %% Unless required by applicable law or agreed to in writing, software
  11. %% distributed under the License is distributed on an "AS IS" BASIS,
  12. %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. %% See the License for the specific language governing permissions and
  14. %% limitations under the License.
  15. %%--------------------------------------------------------------------
  16. -module(emqx_logger_SUITE).
  17. -compile(export_all).
  18. -compile(nowarn_export_all).
  19. -include_lib("eunit/include/eunit.hrl").
  20. -define(LOGGER, emqx_logger).
  21. -define(SUPPORTED_LEVELS, [emergency, alert, critical, error, warning, notice, info, debug]).
  22. all() -> emqx_common_test_helpers:all(?MODULE).
  23. init_per_testcase(_TestCase, Config) ->
  24. Config.
  25. end_per_testcase(_TestCase, Config) ->
  26. Config.
  27. t_debug(_) ->
  28. ?assertEqual(ok, ?LOGGER:debug("for_test")),
  29. ?assertEqual(ok, ?LOGGER:debug("for_test", [])),
  30. ?assertEqual(ok, ?LOGGER:debug(#{pid => self()}, "for_test", [])).
  31. t_info(_) ->
  32. ?assertEqual(ok, ?LOGGER:info("for_test")),
  33. ?assertEqual(ok, ?LOGGER:info("for_test", [])),
  34. ?assertEqual(ok, ?LOGGER:info(#{pid => self()}, "for_test", [])).
  35. t_warning(_) ->
  36. ?assertEqual(ok, ?LOGGER:warning("for_test")),
  37. ?assertEqual(ok, ?LOGGER:warning("for_test", [])),
  38. ?assertEqual(ok, ?LOGGER:warning(#{pid => self()}, "for_test", [])).
  39. t_error(_) ->
  40. ?assertEqual(ok, ?LOGGER:error("for_test")),
  41. ?assertEqual(ok, ?LOGGER:error("for_test", [])),
  42. ?assertEqual(ok, ?LOGGER:error(#{pid => self()}, "for_test", [])).
  43. t_critical(_) ->
  44. ?assertEqual(ok, ?LOGGER:critical("for_test")),
  45. ?assertEqual(ok, ?LOGGER:critical("for_test", [])),
  46. ?assertEqual(ok, ?LOGGER:critical(#{pid => self()}, "for_test", [])).
  47. t_set_proc_metadata(_) ->
  48. ?assertEqual(ok, ?LOGGER:set_proc_metadata(#{pid => self()})).
  49. t_primary_log_level(_) ->
  50. ?assertEqual(ok, ?LOGGER:set_primary_log_level(debug)),
  51. ?assertEqual(debug, ?LOGGER:get_primary_log_level()).
  52. t_get_log_handlers(_) ->
  53. ok = logger:add_handler(logger_std_h_for_test, logger_std_h, #{
  54. config => #{type => file, file => "logger_std_h_for_test"}
  55. }),
  56. ok = logger:add_handler(logger_disk_log_h_for_test, logger_disk_log_h, #{
  57. config => #{file => "logger_disk_log_h_for_test"}
  58. }),
  59. ?assertMatch([_ | _], ?LOGGER:get_log_handlers()).
  60. t_get_log_handler(_) ->
  61. [
  62. ?assertMatch(#{id := Id}, ?LOGGER:get_log_handler(Id))
  63. || #{id := Id} <- ?LOGGER:get_log_handlers()
  64. ].
  65. t_set_log_handler_level(_) ->
  66. [
  67. begin
  68. ?LOGGER:set_log_handler_level(Id, Level),
  69. ?assertMatch(#{id := Id, level := Level}, ?LOGGER:get_log_handler(Id))
  70. end
  71. || #{id := Id} <- ?LOGGER:get_log_handlers(),
  72. Level <- ?SUPPORTED_LEVELS
  73. ],
  74. ?LOGGER:set_log_level(warning).
  75. t_set_log_level(_) ->
  76. ?assertMatch({error, _Error}, ?LOGGER:set_log_level(for_test)),
  77. ?assertEqual(ok, ?LOGGER:set_log_level(debug)),
  78. ?assertEqual(ok, ?LOGGER:set_log_level(warning)).
  79. t_set_all_log_handlers_level(_) ->
  80. ?assertMatch({error, _Error}, ?LOGGER:set_all_log_handlers_level(for_test)).
  81. t_start_stop_log_handler(_) ->
  82. io:format("====== started: ~p~n", [?LOGGER:get_log_handlers(started)]),
  83. io:format("====== stopped: ~p~n", [?LOGGER:get_log_handlers(stopped)]),
  84. StartedN = length(?LOGGER:get_log_handlers(started)),
  85. StoppedN = length(?LOGGER:get_log_handlers(stopped)),
  86. [
  87. begin
  88. io:format("------ stopping : ~p~n", [Id]),
  89. ok = ?LOGGER:stop_log_handler(Id),
  90. ?assertEqual(StartedN - 1, length(?LOGGER:get_log_handlers(started))),
  91. ?assertEqual(StoppedN + 1, length(?LOGGER:get_log_handlers(stopped))),
  92. io:format("------ starting : ~p~n", [Id]),
  93. ok = ?LOGGER:start_log_handler(Id),
  94. ?assertEqual(StartedN, length(?LOGGER:get_log_handlers(started))),
  95. ?assertEqual(StoppedN, length(?LOGGER:get_log_handlers(stopped)))
  96. end
  97. || #{id := Id} <- ?LOGGER:get_log_handlers(started)
  98. ].
  99. t_start_stop_log_handler2(_) ->
  100. %% start a handler that is already started returns ok
  101. [
  102. begin
  103. ok = ?LOGGER:start_log_handler(Id)
  104. end
  105. || #{id := Id} <- ?LOGGER:get_log_handlers(started)
  106. ],
  107. %% stop a no exists handler returns {not_started, Id}
  108. ?assertMatch(
  109. {error, {not_started, invalid_handler_id}},
  110. ?LOGGER:stop_log_handler(invalid_handler_id)
  111. ),
  112. %% stop a handler that is already stopped returns {not_started, Id}
  113. ok = ?LOGGER:stop_log_handler(default),
  114. ?assertMatch(
  115. {error, {not_started, default}},
  116. ?LOGGER:stop_log_handler(default)
  117. ).
  118. t_set_metadata_peername(_) ->
  119. ?assertEqual(ok, ?LOGGER:set_metadata_peername("for_test")).
  120. t_set_metadata_clientid(_) ->
  121. ?assertEqual(ok, ?LOGGER:set_metadata_clientid(<<>>)),
  122. ?assertEqual(ok, ?LOGGER:set_metadata_clientid("for_test")).
  123. split_toks_at_dot(AllToks) ->
  124. case lists:splitwith(fun is_no_dot/1, AllToks) of
  125. {Toks, [{dot, _} = Dot]} -> [Toks ++ [Dot]];
  126. {Toks, [{dot, _} = Dot | Tl]} -> [Toks ++ [Dot] | split_toks_at_dot(Tl)]
  127. end.
  128. is_no_dot({dot, _}) -> false;
  129. is_no_dot(_) -> true.