2011-02-08 119 views
3

什麼是Rails3的「最佳實踐」自定義日誌記錄選項?任何人都可以提出好的寶石或技術,用於伐木。Rails3自定義日誌記錄選項?

一般來說,定製,非控制器,非模型的東西是什麼?如果我做一個自定義的記錄是這樣的:

#custom_logger.rb 
class CustomLogger < Logger 
    def format_message(severity, timestamp, progname, msg) 
    "#{msg}\n" 
    end 
end 

logfile = File.open(RAILS_ROOT + '/log/custom.log', 'a') #create log file 
logfile.sync = true #automatically flushes data to file 
CUSTOM_LOGGER = CustomLogger.new(logfile) #constant accessible anywhere 

(從here被盜)應的是,在「/ lib目錄」文件中去?在「application.rb」中?或者在初始化程序中?

我似乎無法找到任何描述與以前的Rails版本的這些小差異的任何東西。

感謝

回答

2

我把礦application.rb中,因爲它是隻有幾行。我很懶。如果你把你的類放在一個lib /文件中,你必須手動要求它或設置lib/autoloading。

這裏是我的記錄代碼:

application.rb中:

class DreamLogFormatter < Logger::Formatter 
    def call(severity, time, progname, msg) 
    "[%s(%d)%5s] %s\n" % [time.to_s(:short), $$, severity, msg2str(msg)] 
    end 
end 

....

config.logger = Logger.new(Rails.root.join('log', "#{Rails.env}.log"), 10, 30*1024*1024) 
config.logger.formatter = DreamLogFormatter.new 

通知我搖每30MB的日誌,並保留最後10個日誌。

+0

Rails使用BufferedLogger。我閱讀了關於ruby-core郵件列表的一些討論,看起來很隨意。他們描述的唯一好處是在多個進程中同時進行非交錯編寫,但1.9.2版的Stdlib Logger類在其中有一個Mutex,看起來完成了同樣的事情。除了Logger很容易改變,並且具有自動日誌滾動功能。如果它成爲主要問題,我只會登錄到Mongo。 – Duke 2011-06-11 20:41:19