Лучший способ зарегистрировать доступ к веб-страницам

Один из моих сайтов использует азот с сервером Cowboy. Я хотел бы регистрировать каждый доступ к веб-страницам, как Apache делает с access.log. Каков был бы лучший способ сделать это?

3 ответа

Решение

Вы можете использовать ковбойское промежуточное ПО https://ninenines.eu/docs/en/cowboy/1.0/guide/middlewares/

Просто создайте простой модуль журнала:

-module(app_web_log).
-behaviour(cowboy_middleware).

-export([execute/2]).

execute(Req, Env) ->
    {{Peer, _}, Req2} = cowboy_req:peer(Req),
    {Method, Req3} = cowboy_req:method(Req2),
    {Path, Req4} = cowboy_req:path(Req3),
    error_logger:info_msg("~p: [~p]: ~p ~p", [calendar:universal_time(), Peer, Method, Path]),
    {ok, Req4, Env}.

и добавьте его в список промежуточных программ:

    {ok, _} = cowboy:start_http(http, 100, [{port, 8080}], [
            {env, [{dispatch, Dispatch}]},
            {middlewares, [cowboy_router, app_web_log, cowboy_handler]}]).

Вместо этого попробуйте использовать Nitrogen поверх веб-сервера Yaws, так как он по умолчанию ведет протоколирование доступа.

Каждый базовый веб-сервер делает это по-своему (или не делает это вообще) - это то, что simple_bridge еще не абстрагировал.

Так что в случае с ковбоем, вам, вероятно, придется подстроить это самостоятельно.

Если вы используете более новую сборку азота (если у вас есть файл site/src/nitrogen_main_handler.erl), затем вы можете отредактировать этот файл, чтобы самостоятельно войти в систему. Например, используя обработчик ошибок erlang, вы можете добавить что-то простое, например:

log_request() ->
    error_logger:info_msg("~p: [~p]: ~p", [{date(), time()}, wf:peer_ip(), wf:url()]).

run() ->
    handlers(),
    log_request(), %% <--- insert before wf_core:run()
    wf_core:run().

Тогда все, что происходит с журналом, можно обработать, настроив error_logger для записи на диск ( http://erldocs.com/17.0/kernel/error_logger.html?i=13&search=error_logger)

Если вы используете более старый азот (который будет иметь site/src/nitrogen_cowboy.erl), то вы аналогичным образом отредактируете этот файл, еще раз до wf_core:run() вызов.

В качестве альтернативы, ваш вариант крючков с ковбоем может также работать. Я с ними не работал, так что ты там сам по себе:)

Другие вопросы по тегам