需要跳过Elixir中的重复日志

时间:2019-04-09 17:42:14

标签: logging elixir otp elixir-framework

我的Elixir代码中有一个特定的日志语句,应该经常调用它,但是我不想每次都打印该日志语句。可能是我想每5次打印一次。

如果有办法请帮助。它以太快的速度淹没了我的日志文件!预先感谢

2 个答案:

答案 0 :(得分:5)

通常没有简单/标准的方法可以做到这一点。如果您真的只需要处理此特定情况,并且要“不时地”记录此语句,则最简单的解决方案是:

Enum.random(0..4) > 0 || Logger.info("My message")

此代码应在20%的情况下触发日志消息。

但是请注意,这与“每5次精确地一次”不同,并且每次触发日志时都需要生成随机数。随机数的生成是否“重”,那么实际的日志操作(或什至根本不相关)在很大程度上取决于特定的环境/情况。

答案 1 :(得分:1)

我不知道已经有任何软件包可以执行此操作,但是您可以通过以下方式实现自己的限制:

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)