Elixir 已忽略Ecto Repo记录器配置

Elixir 已忽略Ecto Repo记录器配置,elixir,ecto,Elixir,Ecto,我尝试将ecto日志级别设置为:info,并根据以下内容在我的回购配置中添加了这些行: 然而,我在日志中看到的是: [debug] QUERY OK db=5.1ms INSERT INTO ... 很明显,它没有任何效果 我还尝试添加自定义模块: EXTO_inspector.ex: defmodule App.EctoInspector do def log(log) do IO.inspect(log) log end end config.exs: logge

我尝试将ecto日志级别设置为:info,并根据以下内容在我的回购配置中添加了这些行:

然而,我在日志中看到的是:

[debug] QUERY OK db=5.1ms
INSERT INTO ...
很明显,它没有任何效果

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

EXTO_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

,如中所述:

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

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


或者通过使用mix do:clean、deps.compile或mix deps.compile强制异位重建-强制异位仅重新编译异位,归功于Sascha Wolf。

是的,这很有效。我甚至没有想到重新编译依赖项。您可能想了解更多关于编译阶段与运行时的信息。所有宏都被扩展,例如在编译时被翻译成AST,而Ecto config肯定会使用宏来读取日志配置,以完全消除不必要的AST。运行时没有单独的if,调试代码不再出现在您的beam中。您也可以仅通过使用mix deps.compile-force-exto重新编译ecto
loggers: [
  {App.EctoInspector, :log, []}
]
use App.Repo, loggers: [{Ecto.LogEntry, :log, [:info]}]