summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Bakken <lbakken@pivotal.io>2019-12-09 11:13:30 -0800
committerLuke Bakken <lbakken@pivotal.io>2019-12-09 11:17:30 -0800
commit4c71cb6568c68fef1c94624b212f3357450a7f73 (patch)
tree945f831e41850ec9c375be12219e1bf3a05dc193
parent8600e543e384470f972d81238a94449433ea0645 (diff)
downloadrabbitmq-server-git-4c71cb6568c68fef1c94624b212f3357450a7f73.tar.gz
Ensure syslog application is started when used as backend
Fixes #2044 Fixes #2044 To test - * Clone https://github.com/lukebakken/rabbitmq-server-2044 * Ensure `syslog-ng` is in your `PATH`, then run `run-syslog-ng.sh` * Start RabbitMQ using `rabbitmq.config` * Run the following to log using the federation sink: ``` rabbit_federation_link_util:log_debug(rabbit_misc:r(<<"/">>, exchange), "TEST TEST ~s", [bar]). ``` Without this patch, nothing will be sent to the local `syslog-ng` server. Also, running `application:which_applications()` will not show that `syslog` is started. Applying this patch will fix both.
-rw-r--r--src/rabbit_lager.erl31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/rabbit_lager.erl b/src/rabbit_lager.erl
index 339394d123..09a114b129 100644
--- a/src/rabbit_lager.erl
+++ b/src/rabbit_lager.erl
@@ -364,11 +364,11 @@ lager_backend(exchange) -> lager_exchange_backend.
%% Syslog backend is using an old API for configuration and
%% does not support proplists.
-generate_handler(syslog_lager_backend, HandlerConfig) ->
+generate_handler(syslog_lager_backend=Backend, HandlerConfig) ->
DefaultConfigVal = default_config_value(level),
Level = proplists:get_value(level, HandlerConfig, DefaultConfigVal),
- ok = app_utils:load_applications([syslog]),
- [{syslog_lager_backend,
+ ok = configure_handler_backend(Backend),
+ [{Backend,
[Level,
{},
{lager_default_formatter, syslog_formatter_config()}]}];
@@ -377,6 +377,11 @@ generate_handler(Backend, HandlerConfig) ->
lists:ukeymerge(1, lists:ukeysort(1, HandlerConfig),
lists:ukeysort(1, default_handler_config(Backend)))}].
+configure_handler_backend(syslog_lager_backend) ->
+ app_utils:load_applications([syslog]);
+configure_handler_backend(_Backend) ->
+ ok.
+
default_handler_config(lager_console_backend) ->
[{level, default_config_value(level)},
{formatter_config, default_config_value(formatter_config)}];
@@ -546,6 +551,18 @@ handler_level_more_verbose(Handler, Level) ->
lager_util:level_to_num(HandlerLevel) > lager_util:level_to_num(Level).
merge_lager_sink_handlers([{Name, Sink} | RestSinks], GeneratedSinks, Agg) ->
+ %% rabbitmq/rabbitmq-server#2044.
+ %% We have to take into account that a sink's
+ %% handler backend may need additional configuration here.
+ %% {rabbit_log_federation_lager_event, [
+ %% {handlers, [
+ %% {lager_forwarder_backend, [lager_event,inherit]},
+ %% {syslog_lager_backend, [debug]}
+ %% ]},
+ %% {rabbit_handlers, [
+ %% {lager_forwarder_backend, [lager_event,inherit]}
+ %% ]}
+ %% ]}
case lists:keytake(Name, 1, GeneratedSinks) of
{value, {Name, GenSink}, RestGeneratedSinks} ->
Handlers = proplists:get_value(handlers, Sink, []),
@@ -555,11 +572,11 @@ merge_lager_sink_handlers([{Name, Sink} | RestSinks], GeneratedSinks, Agg) ->
%% Remove handlers defined in previous starts
ConfiguredHandlers = remove_rabbit_handlers(Handlers, FormerRabbitHandlers),
NewHandlers = GenHandlers ++ ConfiguredHandlers,
+ ok = maybe_configure_handler_backends(NewHandlers),
MergedSink = lists:keystore(rabbit_handlers, 1,
lists:keystore(handlers, 1, Sink,
{handlers, NewHandlers}),
{rabbit_handlers, GenHandlers}),
-
merge_lager_sink_handlers(
RestSinks,
RestGeneratedSinks,
@@ -572,6 +589,12 @@ merge_lager_sink_handlers([{Name, Sink} | RestSinks], GeneratedSinks, Agg) ->
end;
merge_lager_sink_handlers([], GeneratedSinks, Agg) -> GeneratedSinks ++ Agg.
+maybe_configure_handler_backends([]) ->
+ ok;
+maybe_configure_handler_backends([{Backend, _}|Backends]) ->
+ ok = configure_handler_backend(Backend),
+ maybe_configure_handler_backends(Backends).
+
list_expected_sinks() ->
case application:get_env(rabbit, lager_extra_sinks) of
{ok, List} ->