2016-09-02 7 views
0

初めてのElixir/Phoenixアプリケーションを作成しました。訪問者のIPアドレスを記録したいと思います。すべての訪問者のIPアドレスをロギングする

私のrouter.exでは、実際に存在するページのIPアドレスを「ロギング」しています。

def log_ip(conn, _) do 
    conn.remote_ip 
    |> Tuple.to_list 
    |> Enum.join(".") 
    |> IO.puts 
    conn 
end 

... 
defmodule Mysite.Router do 
    use Mysite.Web, :router 

    pipeline :browser do 
    plug :log_ip 
    ... 
    scope "/", Mysite do 
    pipe_through :browser 

このすべては、通常、正常に動作しますが、私は、例えば、存在しないページにアクセスしようとしているいくつかのボットがあることを、端末に見ています"/admin.php"、 "/command.php"私はこれらのIPアドレスをログに記録したいが、上記のコードはそれのために働いていない。

潜在的に関係のない、しかし、私はまた、存在しないリンク(例えば/ブログ/存在しないページ)

defimpl Plug.Exception, for: Phoenix.Template.UndefinedError do 
    def status(_exception), do: 404 
end 

connおよびログにアクセスする方法はあり打つ人を処理するために、このコードを持っています私が404を返す前にremote_ip(またはこれをすべて処理するより良い方法)?

答えて

3

ルータの代わりにエンドポイントにロガープラグを挿入できます。エンドポイントはlib/<yourapp>/endpoint.exです。あなたの関数の定義と例のものの後plug :log_ipコールの両方を入れることができます

... 
    plug Plug.RequestId 
    plug Plug.Logger 
    ... 

:あなたのようなものが表示されます。

+0

ありがとうございました!私は(関数プラグを使用する代わりに)モジュールプラグを作成して、プラグインMysite.Plugs.LogIpをendpoint.exに追加しました。 –

関連する問題