词汇:logger

n. 记录器;(美)樵夫,伐木工

相关场景

30.define_method or method_missing:
如果没有找到任何方法,method_missing就会被执行;但是因为又super的原因,这里会有迷惑。def method_missing(name, *args, &block) if @hash.respond_to?(name) @hash.send(name, *args, &block) else super end end; Hash.public_instance_methods(false).each do |name| define_method(name) do |*args, &block| @hash.send(name, *args, &block) end; h.public_methods(false).sort.take(5); 实现了Hash的方法。
AuditDecorator @logger = Logger.new($stdout); private def method_messing(name, *arg, &block) @logger.info("calling '#{name}' on #{@object.inspect}"); @object.send(name, *args, &block); define_method更加适合做这个了。 mod=Module.new do object.public_methods.each do |name| define_method(name) do |*args, &block| @logger.info("") @object.send(name, *args, &block) end end end extend(mod) ; 创建了一个匿名的模块。 —— define_method恢复了内省方法。。 respond_to? and respond_to_missing?
>> Effective Ruby
26. 限制retry次数,retry间隔指数增加:
retries = 0; begin service.update(record); rescue VendorDeadlockError ; raise if retries >= 3 ; retries += 1; logger.warn("API failure: #{e}, retrying...");sleep(5 ** retries); retry; end

>> Effective Ruby