我的一个网站是使用氮气和牛仔服务器。 我想记录每次访问网页,就像Apache使用access.log一样。 最好的方法是什么?
答案 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()
电话之前再次编辑该文件。
或者,您与牛仔的钩子选项也可以。我没有与他们合作,所以你自己在那里:)