Нужно пропустить повторяющиеся логи в эликсире - PullRequest
0 голосов
/ 09 апреля 2019

В моем коде Elixir есть определенный оператор журнала, который должен вызываться очень часто, но я не хочу печатать этот оператор журнала каждый раз. Может быть, я хочу напечатать это один раз каждые 5 раз.

Пожалуйста, помогите, если есть способ сделать это. Это слишком быстро заполняет мой лог-файл! Заранее спасибо

Ответы [ 2 ]

5 голосов
/ 10 апреля 2019

Нет простого / стандартного способа сделать это вообще.Если вам действительно нужно обработать только этот конкретный случай, и вы хотите записывать этот оператор «время от времени», самое простое решение будет следующим:

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

Этот код должен вызвать сообщение журнала в20% случаев.

Обратите внимание, что это будет не то же самое, что "ровно один раз каждые 5 раз", и для этого потребуется генерировать случайное число при каждом запуске журнала.Является ли генерация случайного числа «более тяжелой», чем фактическая операция регистрации (или даже вообще актуальна) сильно зависит от конкретной среды / ситуации.

1 голос
/ 10 апреля 2019

Я не знаю ни одного пакета, который бы уже делал это, но вы могли бы реализовать собственное регулирование примерно так:

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)
...