2

私の Web サイトの 1 つは、Cowboy サーバーで Nitrogen を使用しています。Apache が access.log で行うように、Web ページへのすべてのアクセスをログに記録したいと考えています。それを行う最良の方法は何ですか?

4

3 に答える 3

9

カウボーイ ミドルウェアを使用できますhttps://ninenes.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]}]).
于 2014-12-02T21:22:42.007 に答える
1

基礎となる各 Web サーバーは異なる方法で (またはまったく) 処理を行います。これは、simple_bridge がまだ抽象化していないものです。

したがって、カウボーイの場合は、自分で装備する必要があります。

新しいビルドの Nitrogen を使用している場合 (ファイルがある場合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 )

古い Nitrogen site/src/nitrogen_cowboy.erl( wf_core:run().

または、カウボーイのフック オプションも同様に機能します。私は彼らと一緒に仕事をしたことがないので、あなたは自分でそこにいます:)

于 2014-12-02T02:10:35.197 に答える
1

代わりに Yaws Web サーバー上で Nitrogen を使用してみてください。これは、デフォルトでアクセス ログを実行するためです。

于 2014-11-28T14:49:45.477 に答える