2012-08-29 81 views
0

我已閱讀文檔guideclass我想創建一個記錄器,每天記錄日誌信息,讓我們說一週後,每次都會自動刪除最舊的日誌信息。如何初始化軌道3中的記錄器?

logfile = File.open(RAILS_ROOT + '/log/'+ (Date.today << 1).to_s + '_custom.log', 'a') #create log file 
logfile.sync = true #automatically flushes data to file 
CUSTOM_LOGGER = CustomLogger.new(logfile, 'daily') #constant accessible anywhere 

另外,我希望創建一個自定義日誌記錄,那麼例如一些看起來像這樣(格式):

class MyLogger < Logger 
    def format_message(severity, timestamp, progname, msg) 
    "#{timestamp} : #{msg}\n" 
    end 
end 

所以基本上,我想有一個更好的主意在哪裏將所有內容正確放置在哪個目錄下例如,在MyLogger應該邏輯性......(地方?一個助手?或在應用程序/配置/?

that來實現這一點,我通過把一切都使之成爲有效的方法是什麼?

config/initializers和創建一個名爲my_logger.rb的文件我仍然堅持刪除/管理日誌文件

服務器是否處理該部分的日誌輪換(我知道有一些來自linux操作系統的logrotation )?或Rails可以在內部處理?

回答

2
  1. MyLogger應放在哪裏?

    可能把它放在/ lib下。然後您可以從設置自定義記錄器的初始化程序中請求它。

  2. 如何定期刪除最舊的日誌信息?

    有無數的方法可以做到這一點,選擇將根據您的約束。你沒有多說你的約束,所以很難給你正確的答案。例如。您可以在每次添加新日誌條目時清理舊日誌,可以運行cron作業,可以安裝一些非Rails軟件來執行日誌輪轉和其他日誌維護,如果您使用Heroku,則可以使用Papertrail。看起來https://devcenter.heroku.com/articles/scheduled-jobs-custom-clock-processes

    記住Rails的設計更多的是處理請求,並在請求的上下文中響應它們,而不是在接收請求的上下文之外運行維護。您可以將維護作爲對MyLogger的每個format_message請求的副作用,檢查最舊的日誌記錄條目,並且如果發現超過一週的日誌條目,請刪除它們。你還沒有給出一個限制,爲什麼你不能在進程中做這件事,如果你早期的原型和便攜式的原型,那麼這會讓你快速。

+0

謝謝你的回答。我同意你的第一個答案,這是我做到的方式。其次,我正考慮使用linux的logrotation(因爲我的服務器運行它)並在網上找到體面的信息以便輕鬆實現。 – fneron

相關問題