如何在Elixir脚本中屏蔽第三方库的调试日志信息?
屏蔽Elixir脚本中第三方库的调试日志
要解决第三方库输出调试级Logger日志的问题,你可以通过以下几种方式全局屏蔽或调整日志级别:
方法一:在脚本中提前配置Logger级别
在Mix.install执行前直接设置Logger的日志级别,只输出指定级别及以上的日志(比如:info或:warn),调试级别的日志会被自动过滤:
#!/usr/bin/env -S ERL_FLAGS=+B elixir # 设置Logger仅输出info及以上级别的日志 Logger.configure(level: :info) Mix.install([ {:req, "~> 0.5.0"}, {:feeder_ex, "~> 1.1.0"}, {:timex, "~> 3.7.0"}, {:yaml_elixir, "~> 2.9"} ]) # 后续脚本代码...
方法二:通过环境变量预配置Logger
如果Mix.install启动依赖时Logger已初始化,更稳妥的方式是提前设置Logger的应用环境变量,确保Logger启动时就使用指定级别:
#!/usr/bin/env -S ERL_FLAGS=+B elixir # 预配置Logger级别为:warn,仅输出警告及以上日志 Application.put_env(:logger, :level, :warn) Mix.install([ {:req, "~> 0.5.0"}, {:feeder_ex, "~> 1.1.0"}, {:timex, "~> 3.7.0"}, {:yaml_elixir, "~> 2.9"} ]) # 后续脚本代码...
方法三:仅屏蔽特定库的调试日志(可选)
如果不想全局屏蔽所有调试日志,只想过滤特定库(比如Req)的调试信息,可以通过Logger的过滤功能实现:
#!/usr/bin/env -S ERL_FLAGS=+B elixir Logger.configure( level: :debug, filter: fn log_event -> # 排除Req模块的调试日志 not String.starts_with?(Atom.to_string(log_event.metadata.module), "Req.") end ) Mix.install([ {:req, "~> 0.5.0"}, {:feeder_ex, "~> 1.1.0"}, {:timex, "~> 3.7.0"}, {:yaml_elixir, "~> 2.9"} ]) # 后续脚本代码...
注:日志级别优先级从低到高为
:debug<:info<:warn<:error,设置级别后,低于该级别的日志会被忽略。
内容的提问来源于stack exchange,提问作者TNT
相关产品推荐
相关产品推荐

