【问题标题】:Ecto Repo loggers config ignoredEcto Repo 记录器配置被忽略
【发布时间】:2018-02-08 16:36:14
【问题描述】:

我尝试将 ecto 日志级别设置为 :info 并根据 docs 在我的 Repo 配置中添加这些行:

config :app, App.Repo,
  loggers: [
    {Ecto.LogEntry, :log, [:info]}
  ]

但是我在日志中看到的是:

[debug] QUERY OK db=5.1ms
INSERT INTO ...

很明显,它没有效果。

我也尝试添加自定义模块:

ecto_inspector.ex:

defmodule App.EctoInspector do
  def log(log) do
    IO.inspect(log)
    log
  end
end

config.exs:

loggers: [
  {App.EctoInspector, :log, []}
]

日志的配置方式是否发生了变化,但在文档中没有更新?

我使用 Ecto v2.2.8

【问题讨论】:

    标签: elixir ecto


    【解决方案1】:

    the documentation中所述:

    此选项在编译时处理,也可以作为使用Ecto.Repo的选项提供。

    重点是我的。更改您的 config.exs 文件不会触发 Ecto 重新构建。可以通过将此选项传递给use App.Repo 来实现所需的行为:

    use App.Repo, loggers: [{Ecto.LogEntry, :log, [:info]}]
    

    或通过使用 mix do: clean, deps.compile 强制 Ecto 重建(或 mix deps.compile --force ecto 仅重新编译 Ecto,归功于 Sascha Wolf。)

    【讨论】:

    • 是的,这行得通。我什至没有想过重新编译依赖项
    • 您可能想了解更多关于编译阶段与运行时的信息。所有宏都在编译时扩展(例如转换为AST),Ecto config 肯定使用宏来读取日志配置完全消除不需要的AST 。运行时中没有一个if,并且调试代码不再显示在您的光束中
    • 你也可以只使用mix deps.compile --force ecto重新编译ecto
    猜你喜欢
    • 2013-03-07
    • 2017-08-23
    • 2014-05-07
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多