【问题标题】:Phoenix/Elixir - Logger works in some modules, but not othersPhoenix/Elixir - Logger 在某些模块中工作,但在其他模块中不工作
【发布时间】:2017-07-11 17:08:01
【问题描述】:

我有一个 phoenix 应用程序,我在其中使用 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。

【问题讨论】:

  • 我猜这是因为模式与数据的匹配不正确,而您实际上使用的是call/2 的第二个定义。
  • 哦,有趣的观察...让我试试

标签: logging elixir phoenix-framework


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2014-08-25
    相关资源
    最近更新 更多