diff options
| author | Michael Klishin <michael@novemberain.com> | 2017-08-21 20:44:43 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-08-21 20:44:43 -0400 |
| commit | 5598488204c7c762bd007e2732ca8e984b8a7302 (patch) | |
| tree | 5db20076abc1c8784c334b7023fec78ca3122325 /test | |
| parent | 8034de0125e56ce575c1e8a93cff164bcd33f96e (diff) | |
| parent | f3f09fb028bcdb2b28fa51840b28862ede54ecac (diff) | |
| download | rabbitmq-server-git-5598488204c7c762bd007e2732ca8e984b8a7302.tar.gz | |
Merge pull request #1335 from rabbitmq/rabbitmq-website-418
Refactor log configuration to be consistent with log doc guide
Diffstat (limited to 'test')
| -rw-r--r-- | test/unit_inbroker_non_parallel_SUITE.erl | 26 | ||||
| -rw-r--r-- | test/unit_log_config_SUITE.erl | 658 |
2 files changed, 675 insertions, 9 deletions
diff --git a/test/unit_inbroker_non_parallel_SUITE.erl b/test/unit_inbroker_non_parallel_SUITE.erl index 2af6368f34..9c7d798ecc 100644 --- a/test/unit_inbroker_non_parallel_SUITE.erl +++ b/test/unit_inbroker_non_parallel_SUITE.erl @@ -238,18 +238,20 @@ log_management1(_Config) -> %% logging directed to tty (first, remove handlers) ok = rabbit:stop(), ok = clean_logs([LogFile], Suffix), - ok = application:set_env(rabbit, lager_handler, tty), + ok = application:set_env(rabbit, lager_default_file, tty), + application:unset_env(rabbit, log), application:unset_env(lager, handlers), application:unset_env(lager, extra_sinks), ok = rabbit:start(), timer:sleep(200), rabbit_log:info("test info"), - [{error, enoent}] = empty_files([LogFile]), + [{error, enoent}] = non_empty_files([LogFile]), %% rotate logs when logging is turned off ok = rabbit:stop(), ok = clean_logs([LogFile], Suffix), - ok = application:set_env(rabbit, lager_handler, false), + ok = application:set_env(rabbit, lager_default_file, false), + application:unset_env(rabbit, log), application:unset_env(lager, handlers), application:unset_env(lager, extra_sinks), ok = rabbit:start(), @@ -261,7 +263,8 @@ log_management1(_Config) -> %% cleanup ok = rabbit:stop(), ok = clean_logs([LogFile], Suffix), - ok = application:set_env(rabbit, lager_handler, LogFile), + ok = application:set_env(rabbit, lager_default_file, LogFile), + application:unset_env(rabbit, log), application:unset_env(lager, handlers), application:unset_env(lager, extra_sinks), ok = rabbit:start(), @@ -279,7 +282,8 @@ log_management_during_startup1(_Config) -> %% start application with simple tty logging ok = rabbit:stop(), ok = clean_logs([LogFile], Suffix), - ok = application:set_env(rabbit, lager_handler, tty), + ok = application:set_env(rabbit, lager_default_file, tty), + application:unset_env(rabbit, log), application:unset_env(lager, handlers), application:unset_env(lager, extra_sinks), ok = rabbit:start(), @@ -289,7 +293,8 @@ log_management_during_startup1(_Config) -> delete_file(NonExistent), delete_file(filename:dirname(NonExistent)), ok = rabbit:stop(), - ok = application:set_env(rabbit, lager_handler, NonExistent), + ok = application:set_env(rabbit, lager_default_file, NonExistent), + application:unset_env(rabbit, log), application:unset_env(lager, handlers), application:unset_env(lager, extra_sinks), ok = rabbit:start(), @@ -301,7 +306,8 @@ log_management_during_startup1(_Config) -> delete_file(NoPermission1), delete_file(filename:dirname(NoPermission1)), ok = rabbit:stop(), - ok = application:set_env(rabbit, lager_handler, NoPermission1), + ok = application:set_env(rabbit, lager_default_file, NoPermission1), + application:unset_env(rabbit, log), application:unset_env(lager, handlers), application:unset_env(lager, extra_sinks), ok = try rabbit:start() of @@ -326,7 +332,8 @@ log_management_during_startup1(_Config) -> ok -> ok; {error, lager_not_running} -> ok end, - ok = application:set_env(rabbit, lager_handler, NoPermission2), + ok = application:set_env(rabbit, lager_default_file, NoPermission2), + application:unset_env(rabbit, log), application:unset_env(lager, handlers), application:unset_env(lager, extra_sinks), ok = try rabbit:start() of @@ -343,7 +350,8 @@ log_management_during_startup1(_Config) -> end, %% cleanup - ok = application:set_env(rabbit, lager_handler, LogFile), + ok = application:set_env(rabbit, lager_default_file, LogFile), + application:unset_env(rabbit, log), application:unset_env(lager, handlers), application:unset_env(lager, extra_sinks), ok = rabbit:start(), diff --git a/test/unit_log_config_SUITE.erl b/test/unit_log_config_SUITE.erl new file mode 100644 index 0000000000..c5a9417723 --- /dev/null +++ b/test/unit_log_config_SUITE.erl @@ -0,0 +1,658 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License at +%% http://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +%% License for the specific language governing rights and limitations +%% under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2016 Pivotal Software, Inc. All rights reserved. +%% + +-module(unit_log_config_SUITE). + +-include_lib("common_test/include/ct.hrl"). +-include_lib("eunit/include/eunit.hrl"). + +-compile(export_all). + +all() -> + [ + default, + env_var_tty, + config_file_handler, + config_file_handler_level, + config_file_handler_rotation, + config_console_handler, + config_syslog_handler, + config_syslog_handler_options, + config_multiple_handlers, + + env_var_overrides_config, + env_var_disable_log, + + config_sinks_level, + config_sink_file, + config_sink_file_override_config_handler_file, + + config_handlers_merged_with_lager_handlers, + sink_handlers_merged_with_lager_extra_sinks_handlers, + sink_file_rewrites_file_backends + ]. + + +init_per_testcase(_, Config) -> + application:load(rabbit), + application:load(lager), + application:unset_env(rabbit, log), + application:unset_env(rabbit, lager_log_root), + application:unset_env(rabbit, lager_default_file), + application:unset_env(rabbit, lager_upgrade_file), + application:unset_env(lager, handlers), + application:unset_env(lager, rabbit_handlers), + application:unset_env(lager, extra_sinks), + os:unsetenv("RABBITMQ_LOGS_source"), + Config. + +end_per_testcase(_, Config) -> + application:unset_env(rabbit, log), + application:unset_env(rabbit, lager_log_root), + application:unset_env(rabbit, lager_default_file), + application:unset_env(rabbit, lager_upgrade_file), + application:unset_env(lager, handlers), + application:unset_env(lager, rabbit_handlers), + application:unset_env(lager, extra_sinks), + os:unsetenv("RABBITMQ_LOGS_source"), + application:unload(rabbit), + application:unload(lager), + Config. + +sink_file_rewrites_file_backends(_) -> + application:set_env(rabbit, log, [ + %% Disable rabbit file handler + {file, [{file, false}]}, + {categories, [{federation, [{file, "federation.log"}, {level, warning}]}]} + ]), + + LagerHandlers = [ + {lager_file_backend, [{file, "lager_file.log"}, {level, error}]}, + {lager_file_backend, [{file, "lager_file_1.log"}, {level, error}]}, + {lager_console_backend, [{level, info}]} + ], + application:set_env(lager, handlers, LagerHandlers), + rabbit_lager:configure_lager(), + + ExpectedSinks = sort_sinks(sink_rewrite_sinks()), + ?assertEqual(ExpectedSinks, sort_sinks(application:get_env(lager, extra_sinks, undefined))). + +sink_rewrite_sinks() -> + [{error_logger_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_channel_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_connection_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_federation_lager_event, + [{handlers,[ + {lager_file_backend, + [{date, ""}, + {file, "federation.log"}, + {formatter_config, formatter_config()}, + {level, warning}, + {size, 0}]}, + {lager_console_backend, [{level, warning}]} + ]}, + {rabbit_handlers,[ + {lager_file_backend, + [{date, ""}, + {file, "federation.log"}, + {formatter_config, formatter_config()}, + {level, warning}, + {size, 0}]}, + {lager_console_backend, [{level, warning}]} + ]}]}, + {rabbit_log_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_mirroring_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_queue_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_upgrade_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]} + ]. + + +sink_handlers_merged_with_lager_extra_sinks_handlers(_) -> + application:set_env(rabbit, log, [ + {file, [{file, "rabbit_file.log"}, {level, debug}]}, + {console, [{enabled, true}, {level, error}]}, + {categories, [ + {connection, [{level, debug}]}, + {channel, [{level, warning}, {file, "channel_log.log"}]} + ]} + ]), + + LagerSinks = [ + {rabbit_log_connection_lager_event, + [{handlers, + [{lager_file_backend, + [{file, "connection_lager.log"}, + {level, info}]}]}]}, + {rabbit_log_channel_lager_event, + [{handlers, + [{lager_console_backend, [{level, debug}]}, + {lager_file_backend, [{level, error}, + {file, "channel_lager.log"}]}]}]}], + + application:set_env(lager, extra_sinks, LagerSinks), + rabbit_lager:configure_lager(), + + ExpectedSinks = sort_sinks([ + {error_logger_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_channel_lager_event, + [{handlers,[ + {lager_console_backend, [{level, error}, + {formatter_config, formatter_config()}]}, + {lager_file_backend, + [{date, ""}, + {file, "channel_log.log"}, + {formatter_config, formatter_config()}, + {level, warning}, + {size, 0}]}, + {lager_console_backend, [{level, debug}]}, + {lager_file_backend, [{level, error}, + {file, "channel_lager.log"}]} + ]}, + {rabbit_handlers,[ + {lager_console_backend, [{level, error}, + {formatter_config, formatter_config()}]}, + {lager_file_backend, + [{date, ""}, + {file, "channel_log.log"}, + {formatter_config, formatter_config()}, + {level, warning}, + {size, 0}]}]} + ]}, + {rabbit_log_connection_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,debug]}, + {lager_file_backend, [{file, "connection_lager.log"}, {level, info}]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,debug]}]}]}, + {rabbit_log_federation_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_mirroring_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_queue_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_upgrade_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}]), + + ?assertEqual(ExpectedSinks, sort_sinks(application:get_env(lager, extra_sinks, undefined))). + + + +config_handlers_merged_with_lager_handlers(_) -> + application:set_env(rabbit, log, [ + {file, [{file, "rabbit_file.log"}, {level, debug}]}, + {console, [{enabled, true}, {level, error}]}, + {syslog, [{enabled, true}]} + ]), + + LagerHandlers = [ + {lager_file_backend, [{file, "lager_file.log"}, {level, info}]}, + {lager_console_backend, [{level, info}]} + ], + application:set_env(lager, handlers, LagerHandlers), + rabbit_lager:configure_lager(), + + FileHandlers = default_expected_handlers("rabbit_file.log", debug), + ConsoleHandlers = expected_console_handler(error), + SyslogHandlers = expected_syslog_handler(), + + ExpectedRabbitHandlers = sort_handlers(FileHandlers ++ ConsoleHandlers ++ SyslogHandlers), + ExpectedHandlers = sort_handlers(ExpectedRabbitHandlers ++ LagerHandlers), + + ?assertEqual(ExpectedRabbitHandlers, sort_handlers(application:get_env(lager, rabbit_handlers, undefined))), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, handlers, undefined))). + +config_sinks_level(_) -> + DefaultLogFile = "rabbit_default.log", + application:set_env(rabbit, lager_default_file, DefaultLogFile), + + application:set_env(rabbit, log, [ + {categories, [ + {connection, [{level, warning}]}, + {channel, [{level, debug}]}, + {mirroring, [{level, error}]} + ]} + ]), + + rabbit_lager:configure_lager(), + + ExpectedSinks = sort_sinks(level_sinks()), + ExpectedSinks = sort_sinks(application:get_env(lager, extra_sinks, undefined)). + +level_sinks() -> + [{error_logger_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_channel_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,debug]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,debug]}]}]}, + {rabbit_log_connection_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,warning]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,warning]}]}]}, + {rabbit_log_federation_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_mirroring_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,error]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,error]}]}]}, + {rabbit_log_queue_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_upgrade_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]} + ]. + +config_sink_file(_) -> + DefaultLogFile = "rabbit_default.log", + application:set_env(rabbit, lager_default_file, DefaultLogFile), + + application:set_env(rabbit, log, [ + {console, [{enabled, true}]}, + {file, [{level, error}]}, + {categories, [ + {connection, [{file, "connection.log"}, {level, warning}]} + ]} + ]), + + rabbit_lager:configure_lager(), + + ExpectedSinks = sort_sinks(file_sinks()), + ?assertEqual(ExpectedSinks, sort_sinks(application:get_env(lager, extra_sinks, undefined))). + +config_sink_file_override_config_handler_file(_) -> + DefaultLogFile = "rabbit_default.log", + application:set_env(rabbit, lager_default_file, DefaultLogFile), + + NonDefaultLogFile = "rabbit_not_default.log", + + application:set_env(rabbit, log, [ + {file, [{file, NonDefaultLogFile}, {level, error}]}, + {console, [{enabled, true}]}, + {categories, [ + {connection, [{file, "connection.log"}, {level, warning}]} + ]} + ]), + + rabbit_lager:configure_lager(), + + ExpectedSinks = sort_sinks(file_sinks()), + ?assertEqual(ExpectedSinks, sort_sinks(application:get_env(lager, extra_sinks, undefined))). + + +file_sinks() -> + [{error_logger_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_channel_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_connection_lager_event, + [{handlers,[ + {lager_console_backend, [{level, warning}, + {formatter_config, formatter_config()}]}, + {lager_file_backend, + [{date, ""}, + {file, "connection.log"}, + {formatter_config, formatter_config()}, + {level, error}, + {size, 0}]}]}, + {rabbit_handlers,[ + {lager_console_backend, [{level, warning}, + {formatter_config, formatter_config()}]}, + {lager_file_backend, + [{date, ""}, + {file, "connection.log"}, + {formatter_config, formatter_config()}, + {level, error}, + {size, 0}]}]} + ]}, + {rabbit_log_federation_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_mirroring_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_queue_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_upgrade_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]} + ]. + + +config_multiple_handlers(_) -> + DefaultLogFile = "rabbit_default.log", + application:set_env(rabbit, lager_default_file, DefaultLogFile), + + application:set_env(rabbit, log, [ + %% Disable file output + {file, [{file, false}]}, + %% Enable console output + {console, [{enabled, true}]}, + %% Enable a syslog output + {syslog, [{enabled, true}, {level, error}]}]), + + rabbit_lager:configure_lager(), + + ConsoleHandlers = expected_console_handler(), + SyslogHandlers = expected_syslog_handler(error, "rabbitmq", daemon), + + ExpectedHandlers = sort_handlers(SyslogHandlers ++ ConsoleHandlers), + + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, handlers, undefined))), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, rabbit_handlers, undefined))). + + +config_console_handler(_) -> + DefaultLogFile = "rabbit_default.log", + application:set_env(rabbit, lager_default_file, DefaultLogFile), + application:set_env(rabbit, log, [{console, [{enabled, true}]}]), + + rabbit_lager:configure_lager(), + + FileHandlers = default_expected_handlers(DefaultLogFile), + ConsoleHandlers = expected_console_handler(), + + ExpectedHandlers = sort_handlers(FileHandlers ++ ConsoleHandlers), + + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, handlers, undefined))), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, rabbit_handlers, undefined))). + +expected_console_handler() -> + expected_console_handler(info). + +expected_console_handler(Level) -> + [{lager_console_backend, [{level, Level}, + {formatter_config, formatter_config()}]}]. + +config_syslog_handler(_) -> + DefaultLogFile = "rabbit_default.log", + application:set_env(rabbit, lager_default_file, DefaultLogFile), + application:set_env(rabbit, log, [{syslog, [{enabled, true}]}]), + + rabbit_lager:configure_lager(), + + FileHandlers = default_expected_handlers(DefaultLogFile), + SyslogHandlers = expected_syslog_handler(), + + ExpectedHandlers = sort_handlers(FileHandlers ++ SyslogHandlers), + + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, handlers, undefined))), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, rabbit_handlers, undefined))). + +config_syslog_handler_options(_) -> + DefaultLogFile = "rabbit_default.log", + application:set_env(rabbit, lager_default_file, DefaultLogFile), + application:set_env(rabbit, log, [{syslog, [{enabled, true}, + {identity, "foo"}, + {facility, local1}, + {level, warning}]}]), + + rabbit_lager:configure_lager(), + + FileHandlers = default_expected_handlers(DefaultLogFile), + SyslogHandlers = expected_syslog_handler(warning, "foo", local1), + + ExpectedHandlers = sort_handlers(FileHandlers ++ SyslogHandlers), + + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, handlers, undefined))), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, rabbit_handlers, undefined))). + +expected_syslog_handler() -> + expected_syslog_handler(info, "rabbitmq", daemon). + +expected_syslog_handler(Level, Identity, Facility) -> + [{lager_syslog_backend, [{level, Level}, + {facility, Facility}, + {formatter_config, formatter_config()}, + {identity, Identity}]}]. + +env_var_overrides_config(_) -> + EnvLogFile = "rabbit_default.log", + application:set_env(rabbit, lager_default_file, EnvLogFile), + + ConfigLogFile = "rabbit_not_default.log", + application:set_env(rabbit, log, [{file, [{file, ConfigLogFile}]}]), + + os:putenv("RABBITMQ_LOGS_source", "environment"), + rabbit_lager:configure_lager(), + + ExpectedHandlers = default_expected_handlers(EnvLogFile), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, handlers, undefined))), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, rabbit_handlers, undefined))). + +env_var_disable_log(_) -> + application:set_env(rabbit, lager_default_file, false), + + ConfigLogFile = "rabbit_not_default.log", + application:set_env(rabbit, log, [{file, [{file, ConfigLogFile}]}]), + + os:putenv("RABBITMQ_LOGS_source", "environment"), + rabbit_lager:configure_lager(), + + ExpectedHandlers = [], + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, handlers, undefined))), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, rabbit_handlers, undefined))). + +config_file_handler(_) -> + DefaultLogFile = "rabbit_default.log", + application:set_env(rabbit, lager_default_file, DefaultLogFile), + + NonDefaultLogFile = "rabbit_not_default.log", + application:set_env(rabbit, log, [{file, [{file, NonDefaultLogFile}]}]), + + rabbit_lager:configure_lager(), + + ExpectedHandlers = default_expected_handlers(NonDefaultLogFile), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, handlers, undefined))), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, rabbit_handlers, undefined))). + +config_file_handler_level(_) -> + DefaultLogFile = "rabbit_default.log", + application:set_env(rabbit, lager_default_file, DefaultLogFile), + + application:set_env(rabbit, log, [{file, [{level, warning}]}]), + rabbit_lager:configure_lager(), + + ExpectedHandlers = default_expected_handlers(DefaultLogFile, warning), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, handlers, undefined))), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, rabbit_handlers, undefined))). + +config_file_handler_rotation(_) -> + DefaultLogFile = "rabbit_default.log", + application:set_env(rabbit, lager_default_file, DefaultLogFile), + + application:set_env(rabbit, log, [{file, [{date, "$D0"}, {size, 5000}, {count, 10}]}]), + rabbit_lager:configure_lager(), + + ExpectedHandlers = sort_handlers(default_expected_handlers(DefaultLogFile, info, 5000, "$D0", [{count, 10}])), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, handlers, undefined))), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, rabbit_handlers, undefined))). + +default(_) -> + LogRoot = "/tmp/log_base", + application:set_env(rabbit, lager_log_root, LogRoot), + LogFile = "rabbit_default.log", + application:set_env(rabbit, lager_default_file, LogFile), + LogUpgradeFile = "rabbit_default_upgrade.log", + application:set_env(rabbit, lager_upgrade_file, LogUpgradeFile), + + rabbit_lager:configure_lager(), + + ExpectedHandlers = default_expected_handlers(LogFile), + LogRoot = application:get_env(lager, log_root, undefined), + ExpectedHandlers = sort_handlers(application:get_env(lager, handlers, undefined)), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, rabbit_handlers, undefined))), + + ExpectedSinks = default_expected_sinks(LogUpgradeFile), + ?assertEqual(ExpectedSinks, sort_sinks(application:get_env(lager, extra_sinks, undefined))). + + +default_expected_handlers(File) -> + default_expected_handlers(File, info, 0, ""). +default_expected_handlers(File, Level) -> + default_expected_handlers(File, Level, 0, ""). +default_expected_handlers(File, Level, RotSize, RotDate) -> + default_expected_handlers(File, Level, RotSize, RotDate, []). +default_expected_handlers(File, Level, RotSize, RotDate, Extra) -> + [{lager_file_backend, + [{date, RotDate}, + {file, File}, + {formatter_config, formatter_config()}, + {level, Level}, + {size, RotSize}] ++ Extra}]. + +default_expected_sinks(UpgradeFile) -> + [{error_logger_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_channel_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_connection_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_federation_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_mirroring_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_queue_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_upgrade_lager_event, + [{handlers, + [{lager_file_backend, + [{date,[]}, + {file, UpgradeFile}, + {formatter_config, formatter_config()}, + {level,info}, + {size,0}]}]}, + {rabbit_handlers, + [{lager_file_backend, + [{date,[]}, + {file, UpgradeFile}, + {formatter_config, formatter_config()}, + {level,info}, + {size,0}]}]}]}]. + +env_var_tty(_) -> + application:set_env(rabbit, lager_log_root, "/tmp/log_base"), + application:set_env(rabbit, lager_default_file, tty), + application:set_env(rabbit, lager_upgrade_file, tty), + %% tty can only be set explicitely + os:putenv("RABBITMQ_LOGS_source", "environment"), + + rabbit_lager:configure_lager(), + + ExpectedHandlers = tty_expected_handlers(), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, handlers, undefined))), + ?assertEqual(ExpectedHandlers, sort_handlers(application:get_env(lager, rabbit_handlers, undefined))), + + %% Upgrade sink will be different. + ExpectedSinks = tty_expected_sinks(), + ?assertEqual(ExpectedSinks, sort_sinks(application:get_env(lager, extra_sinks, undefined))). + +tty_expected_handlers() -> + [{lager_console_backend, + [{formatter_config, formatter_config()}, + {level, info}]}]. + +tty_expected_sinks() -> + [{error_logger_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_channel_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_connection_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_federation_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_lager_event, + [{handlers, [{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers, [{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_mirroring_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_queue_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}, + {rabbit_log_upgrade_lager_event, + [{handlers,[{lager_forwarder_backend,[lager_event,info]}]}, + {rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}]. + +sort_sinks(Sinks) -> + lists:ukeysort(1, + lists:map( + fun({Name, Config}) -> + Handlers = proplists:get_value(handlers, Config), + RabbitHandlers = proplists:get_value(rabbit_handlers, Config), + {Name, lists:ukeymerge(1, + [{handlers, sort_handlers(Handlers)}, + {rabbit_handlers, sort_handlers(RabbitHandlers)}], + lists:ukeysort(1, Config))} + end, + Sinks)). + +sort_handlers(Handlers) -> + lists:keysort(1, + lists:map( + fun + ({Name, [{Atom, _}|_] = Config}) when is_atom(Atom) -> + {Name, lists:ukeysort(1, Config)}; + %% Non-proplist configuration. forwarder backend + (Other) -> + Other + end, + Handlers)). + +formatter_config() -> + [date," ",time," ",color,"[",severity, "] ", {pid,[]}, " ",message,"\n"]. |
