禁用Elixir Ecto Debug输出

王志軍*_*王志軍 18 debugging elixir ecto

无论在iex>或使用mix run -e "My.code"当我运行使用外生混合项目中,外生的调试机制显示像下面一堆sql语句的

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

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

提前致谢.

Szy*_*Jeż 28

如果要更改Ecto(pre 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
Run Code Online (Sandbox Code Playgroud)

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

config :logger, level: :info

更新(由@Milos):

由于Ecto 2.0.0,而不是log_level: :info你需要使用loggers: [{Ecto.LogEntry, :log, [:info]}]

  • 此设定是外生2.0.0改变,而不是`LOG_LEVEL:info`你需要使用`记录器:[{Ecto.LogEntry,:日志,[:信息]}]`. (5认同)
  • 您也可以通过将`loggers`的值设置为空列表来停止Ecto的记录,就像在`loggers:[]`中一样. (4认同)
  • 您需要使用 `log: :info` [在 Ecto 3.0 中](https://hexdocs.pm/ecto/3.0.7/Ecto.Repo.html#content) (2认同)

Paw*_*rok 17

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

config :logger, level: :info
Run Code Online (Sandbox Code Playgroud)

因此,如果您运行应用程序,MIX_ENV=prod iex -S mix您将无法获得调试输出.这意味着当您使用类似MIX_ENV=prod mix release生成的构建版本构建版本时,将不会生成此输出.或者,您可以通过更改相应的设置level: :info或设置:warn所需的任何环境config/#{env}.exs.


alv*_*awa 7

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

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


Nem*_* Ga 5

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

config :app, App.Repo,
  username: "postgres",
  password: "postgres",
  database: "app_dev",
  log: false
Run Code Online (Sandbox Code Playgroud)