You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 rivejä
5.8 KiB

  1. -module(lager_rotate).
  2. -compile(export_all).
  3. -ifdef(TEST).
  4. -include_lib("eunit/include/eunit.hrl").
  5. -endif.
  6. rotate_test_() ->
  7. {foreach,
  8. fun() ->
  9. file:write_file("test1.log", ""),
  10. file:write_file("test2.log", ""),
  11. file:write_file("test3.log", ""),
  12. file:delete("test1.log.0"),
  13. file:delete("test2.log.0"),
  14. file:delete("test3.log.0"),
  15. error_logger:tty(false),
  16. application:load(lager),
  17. application:set_env(lager, handlers,
  18. [{lager_file_backend, [{file, "test1.log"}, {level, info}]},
  19. {lager_file_backend, [{file, "test2.log"}, {level, info}]}]),
  20. application:set_env(lager, extra_sinks,
  21. [{sink_event,
  22. [{handlers,
  23. [{lager_file_backend, [{file, "test3.log"}, {level, info}]}]}
  24. ]}]),
  25. application:set_env(lager, error_logger_redirect, false),
  26. application:set_env(lager, async_threshold, undefined),
  27. lager:start()
  28. end,
  29. fun(_) ->
  30. file:delete("test1.log"),
  31. file:delete("test2.log"),
  32. file:delete("test3.log"),
  33. file:delete("test1.log.0"),
  34. file:delete("test2.log.0"),
  35. file:delete("test3.log.0"),
  36. application:stop(lager),
  37. application:stop(goldrush),
  38. error_logger:tty(true)
  39. end,
  40. [{"Rotate single file",
  41. fun() ->
  42. lager:log(error, self(), "Test message 1"),
  43. lager:log(sink_event, error, self(), "Sink test message 1", []),
  44. lager:rotate_handler({lager_file_backend, "test1.log"}),
  45. ok = wait_until(fun() -> filelib:is_regular("test1.log.0") end, 10),
  46. lager:log(error, self(), "Test message 2"),
  47. lager:log(sink_event, error, self(), "Sink test message 2", []),
  48. {ok, File1} = file:read_file("test1.log"),
  49. {ok, File2} = file:read_file("test2.log"),
  50. {ok, SinkFile} = file:read_file("test3.log"),
  51. {ok, File1Old} = file:read_file("test1.log.0"),
  52. have_no_log(File1, <<"Test message 1">>),
  53. have_log(File1, <<"Test message 2">>),
  54. have_log(File2, <<"Test message 1">>),
  55. have_log(File2, <<"Test message 2">>),
  56. have_log(File1Old, <<"Test message 1">>),
  57. have_no_log(File1Old, <<"Test message 2">>),
  58. have_log(SinkFile, <<"Sink test message 1">>),
  59. have_log(SinkFile, <<"Sink test message 2">>)
  60. end},
  61. {"Rotate sink",
  62. fun() ->
  63. lager:log(error, self(), "Test message 1"),
  64. lager:log(sink_event, error, self(), "Sink test message 1", []),
  65. lager:rotate_sink(sink_event),
  66. ok = wait_until(fun() -> filelib:is_regular("test3.log.0") end, 10),
  67. lager:log(error, self(), "Test message 2"),
  68. lager:log(sink_event, error, self(), "Sink test message 2", []),
  69. {ok, File1} = file:read_file("test1.log"),
  70. {ok, File2} = file:read_file("test2.log"),
  71. {ok, SinkFile} = file:read_file("test3.log"),
  72. {ok, SinkFileOld} = file:read_file("test3.log.0"),
  73. have_log(File1, <<"Test message 1">>),
  74. have_log(File1, <<"Test message 2">>),
  75. have_log(File2, <<"Test message 1">>),
  76. have_log(File2, <<"Test message 2">>),
  77. have_log(SinkFileOld, <<"Sink test message 1">>),
  78. have_no_log(SinkFileOld, <<"Sink test message 2">>),
  79. have_no_log(SinkFile, <<"Sink test message 1">>),
  80. have_log(SinkFile, <<"Sink test message 2">>)
  81. end},
  82. {"Rotate all",
  83. fun() ->
  84. lager:log(error, self(), "Test message 1"),
  85. lager:log(sink_event, error, self(), "Sink test message 1", []),
  86. lager:rotate_all(),
  87. ok = wait_until(fun() -> filelib:is_regular("test3.log.0") end, 10),
  88. lager:log(error, self(), "Test message 2"),
  89. lager:log(sink_event, error, self(), "Sink test message 2", []),
  90. {ok, File1} = file:read_file("test1.log"),
  91. {ok, File2} = file:read_file("test2.log"),
  92. {ok, SinkFile} = file:read_file("test3.log"),
  93. {ok, File1Old} = file:read_file("test1.log.0"),
  94. {ok, File2Old} = file:read_file("test2.log.0"),
  95. {ok, SinkFileOld} = file:read_file("test3.log.0"),
  96. have_no_log(File1, <<"Test message 1">>),
  97. have_log(File1, <<"Test message 2">>),
  98. have_no_log(File2, <<"Test message 1">>),
  99. have_log(File2, <<"Test message 2">>),
  100. have_no_log(SinkFile, <<"Sink test message 1">>),
  101. have_log(SinkFile, <<"Sink test message 2">>),
  102. have_log(SinkFileOld, <<"Sink test message 1">>),
  103. have_no_log(SinkFileOld, <<"Sink test message 2">>),
  104. have_log(File1Old, <<"Test message 1">>),
  105. have_no_log(File1Old, <<"Test message 2">>),
  106. have_log(File2Old, <<"Test message 1">>),
  107. have_no_log(File2Old, <<"Test message 2">>)
  108. end}]}.
  109. have_log(Data, Log) ->
  110. {_,_} = binary:match(Data, Log).
  111. have_no_log(Data, Log) ->
  112. nomatch = binary:match(Data, Log).
  113. wait_until(_Fun, 0) -> {error, too_many_retries};
  114. wait_until(Fun, Retry) ->
  115. case Fun() of
  116. true -> ok;
  117. false ->
  118. timer:sleep(500),
  119. wait_until(Fun, Retry-1)
  120. end.