【问题标题】:Need to Skip Repetitive logs in Elixir需要跳过 Elixir 中的重复日志
【发布时间】:2019-08-31 01:51:08
【问题描述】:

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

如果有办法做到这一点,请提供帮助。它太快地淹没了我的日志文件!提前致谢

【问题讨论】:

    标签: logging erlang-otp elixir


    【解决方案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)
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多