记录网页访问权限的最佳方式

时间:2014-11-27 07:55:00

标签: erlang cowboy nitrogen

我的一个网站是使用氮气和牛仔服务器。 我想记录每次访问网页,就像Apache使用access.log一样。 最好的方法是什么?

3 个答案:

答案 0 :(得分:8)

您可以使用牛仔中间件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}.

并将其添加到middlwares列表中:

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

答案 1 :(得分:1)

尝试在Yaws Web服务器顶部使用Nitrogen,因为它默认执行访问日志记录。

答案 2 :(得分:1)

每个底层网络服务器以不同的方式(或根本不这样做) - 这是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#logfile/1)来处理日志发生的任何事情

如果你使用较旧的氮(可能有site/src/nitrogen_cowboy.erl),那么你会在wf_core:run()电话之前再次编辑该文件。

或者,您与牛仔的钩子选项也可以。我没有与他们合作,所以你自己在那里:)