Регистрация определенного события только один раз в ruby - PullRequest
2 голосов
/ 08 июня 2010

Существуют ли в ruby ​​каркасы ведения журналов, которые позволяют регистрировать определенный тип событий только один раз?

logger = IdealLogger.new
logger.log(:happy_path, "We reached the happy path") # => logs this message
logger.log(:happy_path, "We reached the happy path yet again") # => Doesn't log this
logger.log(:sad_path, "We've encountered a sad path!") # => logs this message

Кроме того, существует ли термин для концепции регистрации определенного типа события только один раз?

Редактировать : Я использую Обычные старые объекты Ruby , а не Rails. Я имел в виду «один раз за каждый раз, когда запускается скрипт» для «один раз».

1 Ответ

2 голосов
/ 08 июня 2010

Я не знаю ни одного, но расширить Logger, чтобы создать свой собственный, не так уж сложно. По сути, он реализует кеширование для вашей регистрации, но вместо того, чтобы извлекать его из кеша и возвращать его, как в обычном приложении, вы отменяете его, когда оно кэшируется. Стратегия реализации и истечения срока действия этого кэша журнала оставлена ​​читателю в качестве упражнения.

что-то вроде:

class IdealLogger < Logger
  def info(event = nil, progname = nil, &block)
    super(progname, &block) unless event_is_cached(event)
  end

  # define debug, warn, error, fatal, and unknown the same way, override others
  # as you wish.
end
...