禁用 Elixir Ecto 调试输出

Disable Elixir Ecto Debug output

无论 iex> 或使用 mix run -e "My.code" 当我 运行 使用 ecto 的混合项目时,Ecto 的调试机制显示一堆如下所示的 SQL

16:42:12.870 [debug] SELECT a0.`id` FROM `account` AS a0 WHERE (a0.`account_name` = ?) ["71000000313"] (39.6ms)`
...

当我不再需要调试输出时,如何关闭它,我找不到任何关于如何更改 ecto 日志级别的东西。

提前致谢。

您的日志记录级别在您的 config/#{env}.exs 文件中配置。如果您查看 config/prod.exs,它很可能已经将该级别设置为 :info:

config :logger, level: :info

因此,如果您 运行 具有 MIX_ENV=prod iex -S mix 的应用程序,您将不会获得调试输出。这意味着当您使用 MIX_ENV=prod mix release 之类的内容构建版本时,生成的构建将不会产生此输出。或者,您可以通过更改适当的 config/#{env}.exs.

为您想要的任何环境设置 level: :info:warn

如果您想更改 Ecto(2.0 之前的版本)日志级别(并且仅更改它),那么您可以使用可以在应用程序 Ecto 存储库配置中设置的 log_level 配置选项。 例如:

config :my_app, MyApp.Repo,
  adapter: Ecto.Adapters.Postgres,
  database: "my_app",
  username: "my_app",
  password: "secret",
  hostname: "localhost",
  port: 5433,
  log_level: :info

当然,除了上述之外,如果您想更改整体日志级别(不仅是 Ecto 日志级别),您可以随时更改 Logger 配置日志 level 选项,例如:

config :logger, level: :info

更新(来自):

从 Ecto 2.0.0 开始,您需要使用 loggers: [{Ecto.LogEntry, :log, [:info]}].

而不是 log_level: :info

更新():

从 Ecto 3.0.0 开始,您需要使用 log: :info.

而不是 log_level: :info

更新():

从 Ecto 3.0.0 开始,您还可以完全禁用日志记录 log: false

简单地将loggers: []放入

config :my_app, MyApp.Repo, adapter: Ecto.Adapters.Postgres, database: "my_app_repo", username: "DB_USERNAME", password: "DB_PASSWORD", hostname: "DB_HOST", loggers: []

Ecto 3 对完全禁用日志记录的回答是:

config :app, App.Repo,
  username: "postgres",
  password: "postgres",
  database: "app_dev",
  log: false

要暂时禁用调试消息,您可以执行 Logger.configure(level: :warn),然后使用 Logger.configure(level: :debug) 重新启用。

https://hexdocs.pm/logger/Logger.html#Levels