【发布时间】:2019-08-31 01:51:08
【问题描述】:
我的 Elixir 代码中有一个特定的日志语句,它应该被非常频繁地调用,但我不想每次都打印该日志语句。可能我想每 5 次打印一次。
如果有办法做到这一点,请提供帮助。它太快地淹没了我的日志文件!提前致谢
【问题讨论】:
标签: logging erlang-otp elixir
我的 Elixir 代码中有一个特定的日志语句,它应该被非常频繁地调用,但我不想每次都打印该日志语句。可能我想每 5 次打印一次。
如果有办法做到这一点,请提供帮助。它太快地淹没了我的日志文件!提前致谢
【问题讨论】:
标签: logging erlang-otp elixir
我不知道有任何软件包已经这样做了,但您可以通过以下方式实现自己的节流:
def maybe_log(msg, 0, log_every) do
Logger.info(msg)
log_every
end
def maybe_log(_msg, n, log_every) when n < 0, do: log_every
def maybe_log(_msg, n, _), do: n-1
# usage
log_count = maybe_log(msg, log_count, log_every)
【讨论】:
一般来说,没有简单/标准的方法来做到这一点。如果您真的只需要处理这种特定情况,并且想要“不时”记录此语句,那么最简单的解决方案如下:
Enum.random(0..4) > 0 || Logger.info("My message")
此代码应在 20% 的情况下触发日志消息。
但是请注意,这与“每 5 次恰好一次”不同,这将需要在每次触发日志时生成随机数。随机数的生成是否比实际的日志操作“更重”(甚至完全相关)在很大程度上取决于特定的环境/情况。
【讨论】: