diff options
| author | Luke Bakken <lbakken@pivotal.io> | 2019-12-09 11:13:30 -0800 |
|---|---|---|
| committer | Luke Bakken <lbakken@pivotal.io> | 2019-12-09 11:17:30 -0800 |
| commit | 4c71cb6568c68fef1c94624b212f3357450a7f73 (patch) | |
| tree | 945f831e41850ec9c375be12219e1bf3a05dc193 | |
| parent | 8600e543e384470f972d81238a94449433ea0645 (diff) | |
| download | rabbitmq-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.erl | 31 |
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} -> |
