diff options
author | Loïc Hoguin <[email protected]> | 2018-07-05 09:01:49 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2018-07-05 09:01:49 +0200 |
commit | 8759b87a29c1318075e277eb35930396e35b1a6d (patch) | |
tree | 0a761b9df537090a9b4bb184f7287833bdb103a9 /src/ranch_acceptors_sup.erl | |
parent | 3805bde6957663a9fabb4cc9912e8d090514fc30 (diff) | |
download | ranch-8759b87a29c1318075e277eb35930396e35b1a6d.tar.gz ranch-8759b87a29c1318075e277eb35930396e35b1a6d.tar.bz2 ranch-8759b87a29c1318075e277eb35930396e35b1a6d.zip |
Add a logger transport option
I had to use the process dictionary to work around the current
interface for one log call. You have been warned.
Diffstat (limited to 'src/ranch_acceptors_sup.erl')
-rw-r--r-- | src/ranch_acceptors_sup.erl | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/ranch_acceptors_sup.erl b/src/ranch_acceptors_sup.erl index 9ec4abf..3df78cb 100644 --- a/src/ranch_acceptors_sup.erl +++ b/src/ranch_acceptors_sup.erl @@ -27,12 +27,21 @@ init([Ref, Transport]) -> ConnsSup = ranch_server:get_connections_sup(Ref), TransOpts = ranch_server:get_transport_options(Ref), NumAcceptors = maps:get(num_acceptors, TransOpts, 10), + Logger = maps:get(logger, TransOpts, error_logger), LSocket = case maps:get(socket, TransOpts, undefined) of undefined -> SocketOpts = maps:get(socket_opts, TransOpts, []), + %% We temporarily put the logger in the process dictionary + %% so that it can be used from ranch:filter_options. The + %% interface as it currently is does not allow passing it + %% down otherwise. + put(logger, Logger), case Transport:listen(SocketOpts) of - {ok, Socket} -> Socket; - {error, Reason} -> listen_error(Ref, Transport, SocketOpts, Reason) + {ok, Socket} -> + erase(logger), + Socket; + {error, Reason} -> + listen_error(Ref, Transport, SocketOpts, Reason, Logger) end; Socket -> Socket @@ -41,18 +50,18 @@ init([Ref, Transport]) -> ranch_server:set_addr(Ref, Addr), Procs = [ {{acceptor, self(), N}, {ranch_acceptor, start_link, [ - LSocket, Transport, ConnsSup + LSocket, Transport, Logger, ConnsSup ]}, permanent, brutal_kill, worker, []} || N <- lists:seq(1, NumAcceptors)], {ok, {{one_for_one, 1, 5}, Procs}}. --spec listen_error(any(), module(), any(), atom()) -> no_return(). -listen_error(Ref, Transport, TransOpts0, Reason) -> - TransOpts1 = lists:keyreplace(cert, 1, TransOpts0, {cert, '...'}), - TransOpts = lists:keyreplace(key, 1, TransOpts1, {key, '...'}), - error_logger:error_msg( +-spec listen_error(any(), module(), any(), atom(), module()) -> no_return(). +listen_error(Ref, Transport, SocketOpts0, Reason, Logger) -> + SocketOpts1 = [{cert, '...'}|proplists:delete(cert, SocketOpts0)], + SocketOpts = [{key, '...'}|proplists:delete(key, SocketOpts1)], + ranch:log(error, "Failed to start Ranch listener ~p in ~p:listen(~999999p) for reason ~p (~s)~n", - [Ref, Transport, TransOpts, Reason, format_error(Reason)]), + [Ref, Transport, SocketOpts, Reason, format_error(Reason)], Logger), exit({listen_error, Ref, Reason}). format_error(no_cert) -> |