summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deps/rabbitmq_web_dispatch/src/webmachine_log.erl44
-rw-r--r--deps/rabbitmq_web_dispatch/src/webmachine_log_handler.erl7
-rw-r--r--deps/rabbitmq_web_dispatch/src/webmachine_logger.hrl3
3 files changed, 52 insertions, 2 deletions
diff --git a/deps/rabbitmq_web_dispatch/src/webmachine_log.erl b/deps/rabbitmq_web_dispatch/src/webmachine_log.erl
index 73f67b9c2f..81b27a8b50 100644
--- a/deps/rabbitmq_web_dispatch/src/webmachine_log.erl
+++ b/deps/rabbitmq_web_dispatch/src/webmachine_log.erl
@@ -18,6 +18,7 @@
-module(webmachine_log).
+-include_lib("kernel/include/logger.hrl").
-include("webmachine_logger.hrl").
-export([add_handler/2,
@@ -126,6 +127,7 @@ fmtnow() ->
%% @doc Notify registered log event handler of an access event.
-spec log_access(tuple()) -> ok.
log_access({_, _, _}=LogData) ->
+ log_to_erlang_logger(LogData),
gen_event:sync_notify(?EVENT_LOGGER, {log_access, LogData}).
%% @doc Close a log file.
@@ -237,3 +239,45 @@ zone(Val) when Val < 0 ->
io_lib:format("-~4..0w", [trunc(abs(Val))]);
zone(Val) when Val >= 0 ->
io_lib:format("+~4..0w", [trunc(abs(Val))]).
+
+log_to_erlang_logger({Status, Body, Req} = LogData) ->
+ User = webmachine_log_handler:user_from_req(Req),
+
+ %% From the request.
+ Method = cowboy_req:method(Req),
+ Path = cowboy_req:path(Req),
+ Version = cowboy_req:version(Req),
+ Peer = case cowboy_req:peer(Req) of
+ {Peer0, _Port} -> Peer0;
+ Other -> Other
+ end,
+ Referer = cowboy_req:header(<<"referer">>, Req, <<>>),
+ UserAgent = cowboy_req:header(<<"user-agent">>, Req, <<>>),
+
+ %% From the response.
+ Length = case Body of
+ {sendfile, _, L, _} -> L;
+ _ -> iolist_size(Body)
+ end,
+
+ FormatStr = "~s",
+ Msg = webmachine_log_handler:format_req(LogData),
+ Meta = #{domain => ?RMQLOG_DOMAIN_HTTP_ACCESS_LOG,
+ http_status => Status,
+ http_user => User,
+ http_req_method => Method,
+ http_req_path => Path,
+ http_req_version => Version,
+ http_req_peer => fmt_ip(Peer),
+ http_req_referer => Referer,
+ http_req_user_agent => UserAgent,
+ http_resp_content_length => Length},
+ case is_http_error(Status) of
+ false -> ?LOG_INFO(FormatStr, [Msg], Meta);
+ true -> ?LOG_ERROR(FormatStr, [Msg], Meta)
+ end.
+
+is_http_error(Status) when Status >= 400 andalso Status < 600 ->
+ true;
+is_http_error(_) ->
+ false.
diff --git a/deps/rabbitmq_web_dispatch/src/webmachine_log_handler.erl b/deps/rabbitmq_web_dispatch/src/webmachine_log_handler.erl
index e19b247d73..e291b6ad0f 100644
--- a/deps/rabbitmq_web_dispatch/src/webmachine_log_handler.erl
+++ b/deps/rabbitmq_web_dispatch/src/webmachine_log_handler.erl
@@ -20,6 +20,9 @@
-behaviour(gen_event).
+-export([format_req/1,
+ user_from_req/1]).
+
%% gen_event callbacks
-export([init/1,
handle_call/2,
@@ -61,7 +64,7 @@ handle_call(_Request, State) ->
handle_event({log_access, LogData}, State) ->
NewState = webmachine_log:maybe_rotate(?MODULE, os:timestamp(), State),
Msg = format_req(LogData),
- webmachine_log:log_write(NewState#state.handle, Msg),
+ webmachine_log:log_write(NewState#state.handle, [Msg, $\n]),
{ok, NewState};
handle_event(_Event, State) ->
{ok, State}.
@@ -112,7 +115,7 @@ fmt_alog(Time, Ip, User, Method, Path, Version,
[webmachine_log:fmt_ip(Ip), " - ", User, [$\s], Time, [$\s, $"], Method, " ", Path,
" ", atom_to_list(Version), [$",$\s],
Status, [$\s], Length, [$\s,$"], Referrer,
- [$",$\s,$"], UserAgent, [$",$\n]].
+ [$",$\s,$"], UserAgent, $"].
user_from_req(Req) ->
try cowboy_req:parse_header(<<"authorization">>, Req) of
diff --git a/deps/rabbitmq_web_dispatch/src/webmachine_logger.hrl b/deps/rabbitmq_web_dispatch/src/webmachine_logger.hrl
index c07068ae6a..f869989a3c 100644
--- a/deps/rabbitmq_web_dispatch/src/webmachine_logger.hrl
+++ b/deps/rabbitmq_web_dispatch/src/webmachine_logger.hrl
@@ -14,3 +14,6 @@
-type wm_log_data() :: #wm_log_data{}.
-define(EVENT_LOGGER, webmachine_log_event).
+
+-include_lib("rabbit_common/include/logging.hrl").
+-define(RMQLOG_DOMAIN_HTTP_ACCESS_LOG, ?DEFINE_RMQLOG_DOMAIN(http_access_log)).