Phoenix / Elixir - Logger在某些模块中工作,但不在其他模块中工作

时间:2017-07-09 15:30:29

标签: logging elixir phoenix-framework

我有一个凤凰应用程序,我正在使用Logger模块记录事件。

在控制器中使用此类控件时,按预期输出到控制台:

#web/controllers/v1/some_controller.ex
defmodule API.V1.SomeController do
  use AgilePulse.Web, :controller
  require Logger
  plug AgilePulse.Plugs.Params when action in [:create]

  def create(conn, params) do
    Logger.info "#{inspect(conn)}"
  end

end

但是这样使用时没有输出:

#web/plugs/params.ex
defmodule AgilePulse.Plugs.Params do
  require Logger

  def init(opts), do: opts

  def call(%Plug.Conn{params: %{"data" => data}} = conn, _opts) do
    Logger.info "#{inspect(conn)}"
  end

  def call(conn, _opts), do: conn

end

为什么?你怎么能让它在这种情况下发挥作用?

目前使用Elixir 1.2和Phoenix 1.2.1。

1 个答案:

答案 0 :(得分:0)

很可能插件中的第一个call/2模式不匹配,而且只是没有被调用。

向第二个Logger.info/1模式添加call/2次调用,您应该会看到它按预期工作。

def call(conn, _opts) do
  Logger.info "Hello!"
  conn
end