diff options
| -rw-r--r-- | src/rabbit_error_logger_file_h.erl | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/src/rabbit_error_logger_file_h.erl b/src/rabbit_error_logger_file_h.erl index 9d93f6fd6b..b7949c2152 100644 --- a/src/rabbit_error_logger_file_h.erl +++ b/src/rabbit_error_logger_file_h.erl @@ -29,11 +29,10 @@ %% https://github.com/erlang/otp/commit/003091a1fcc749a182505ef5675c763f71eacbb0#diff-d9a19ba08f5d2b60fadfc3aa1566b324R108 %% github issue: %% https://github.com/rabbitmq/rabbitmq-server/issues/324 --record(st, - {fd, - filename, - prev_handler, - depth = unlimited}). +-record(st, {fd, + filename, + prev_handler, + depth = unlimited}). %% extracted from error_logger_file_h. See comment above. get_depth() -> case application:get_env(kernel, error_logger_format_depth) of @@ -81,52 +80,49 @@ init({File, {error_logger, Buf}}) -> init(File) -> rabbit_file:ensure_parent_dirs_exist(File), init_file(File, []). - init_file(File, {error_logger, Buf}) -> case init_file(File, error_logger) of - {ok, {Fd, File, PrevHandler}} -> - [handle_event(Event, {Fd, File, PrevHandler}) || + {ok, State} -> + [handle_event(Event, State) || {_, Event} <- lists:reverse(Buf)], - {ok, {Fd, File, PrevHandler}}; + {ok, State}; Error -> Error end; init_file(File, PrevHandler) -> process_flag(trap_exit, true), case file:open(File, [append]) of - {ok,Fd} -> {ok, {Fd, File, PrevHandler}}; - Error -> Error + {ok, Fd} -> + OtpVersion = rabbit_misc:otp_release(), + State = + case OtpVersion of + OtpVersion when OtpVersion > 18.0 -> + #st{fd = Fd, + filename = File, + prev_handler = PrevHandler, + depth = get_depth()}; + _ -> + {Fd, File, PrevHandler} + end, + {ok, State}; + Error -> Error end. handle_event(Event, State) -> safe_handle_event(fun handle_event0/2, Event, State). -safe_handle_event(HandleEvent, Event, {Fd, File, PrevHandler} = State) -> +safe_handle_event(HandleEvent, Event, State) -> try HandleEvent(Event, State) catch - _:function_clause -> - State18_1 = #st{fd = Fd, filename = File, - prev_handler = PrevHandler, - depth = get_depth()}, - try - HandleEvent(Event, State18_1) - catch - _:Error -> - io_format_error(Event, Error, erlang:get_stacktrace()), - {ok, State} - end; _:Error -> - io_format_error(Event, Error, erlang:get_stacktrace()), + io:format( + "Error in log handler~n====================~n" + "Event: ~P~nError: ~P~nStack trace: ~p~n~n", + [Event, 30, Error, 30, erlang:get_stacktrace()]), {ok, State} end. -io_format_error(Event, Error, StackTrace) -> - io:format( - "Error in log handler~n====================~n" - "Event: ~P~nError: ~P~nStack trace: ~p~n~n", - [Event, 30, Error, 30, StackTrace]). - %% filter out "application: foo; exited: stopped; type: temporary" handle_event0({info_report, _, {_, std_info, _}}, State) -> {ok, State}; |
