2014-02-24 29 views
1

舉例來說,如果我有這樣的回調:如何記錄被調用的回調方法?

after_create :notify_users 

當那個叫,我怎麼能登錄類似「notify_users方法被稱爲」我的日誌文件?


我的應用程序中實際上有幾個回調函數。我知道我可以在notify_users方法中添加諸如puts 'notify_users method is being called'之類的東西,但有沒有辦法自動記錄所有回調?

+0

[跟蹤/日誌ActiveRecord的回調(的可能的複製http://stackoverflow.com/questions/13089936/tracking -logging-activerecord-callbacks) –

回答

1

想想看:

module Log 
    def log *args 
    args.each do |m| 
     alias_method m.to_s + '_old', m 

     define_method m do |*args| 
     send(m.to_s + '_old', *args) 
     puts "#{m} is called" 
     end 
    end 
    end 
end 

class C 
    def m1 
    puts 'm1' 
    end 

    def m2 
    puts 'm2' 
    end 

    extend Log 

    log :m1, :m2 
end 

C.new.m1 
C.new.m2 

提供:

m1 
m1 is called 
m2 
m2 is called 
+0

謝謝斯佩蘭斯基。我的回調實際上在許多不同的文件中被調用。你知道是否可以自動調用回調方法名稱,而不管它們被調用的位置,還是必須在每個回調方法中添加一個puts消息? – sjsc

+0

我讚賞斯佩蘭斯基的做法。我會嘗試一下。非常感謝 :) – sjsc

3
def notify_users 
    logger.info "notify_users method is being called" 
end 
+0

謝謝。我實際上有幾個回調。有沒有辦法爲所有被調用的回調動態執行此操作,而不是爲每個回調添加「logger.info ..」? – sjsc

相關問題