需要在Elixir中跳过重复日志

问题描述 投票:-1回答:2

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

如果有办法,请帮忙。它太快了我的日志文件!提前致谢

logging elixir otp elixir-framework
2个回答
5
投票

一般来说,没有简单/标准的方法。如果你真的需要处理这个特定的情况,并且你想“不时”记录这个语句,最简单的解决方案如下:

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

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

但是请注意,这与“每5次完全一次”不一样,每次触发日志时都需要生成随机数。无论是随机数的生成是“更重”,实际的日志操作(甚至是相关的)都在很大程度上取决于具体的环境/情况。


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)
© www.soinside.com 2019 - 2024. All rights reserved.