24

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

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

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

提前致谢。

4

5 回答 5

36

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

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

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

config :logger, level: :info

更新(@Milos):

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

更新(@AndyMacKinlay):

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

更新(@Simon):

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

于 2015-05-19T07:42:54.720 回答
22

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

config :logger, level: :info

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

于 2015-05-18T08:26:28.407 回答
5

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

config :app, App.Repo,
  username: "postgres",
  password: "postgres",
  database: "app_dev",
  log: false
于 2019-03-05T21:54:31.763 回答
4

简单loggers: []放入

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

于 2018-09-24T09:39:50.793 回答
4

要暂时禁用调试消息,您可以Logger.configure(level: :warn)使用Logger.configure(level: :debug).

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

于 2019-09-06T21:14:19.793 回答