May 1
log
icon1 Li Cheng | icon2 Uncategorized | icon4 05 1st, 2007| icon3No Comments »

寫 log

在 rails 的程式裡隨時都可以做 logging:

logger.debug(“debug: current username is #{user.name}”)

“ ” 裡可以隨便放任何的資訊。 #{} 裡可放程式的變數,像使用者的名字 user.name,方便我們紀錄誰登入過。

Logging 有分五種不同的嚴重性。 從最輕微到最嚴重的排列如下:

debug: 除錯 info: 訊息 warn: 警告 error: 錯誤訊息 fatal: 嚴重錯誤

剛剛的例子就是除錯訊息的紀錄方法, 如要紀錄警告資訊的話,在程式裡寫:

logger.warn(“WARN: This transaction is irreversible”)

圖片裡顯示的是在一個 scaffold 產生出來的檔案 (list.rhtml) 裡寫入五個 logger。 每當使用者瀏覽 list.html 時,這五個訊息會被寫入 log 檔裡。

讀 log

紀錄起來的訊息可以在程式下的 log/ 目錄裡看到。如果在開發的模式下跑,所有的 log 會出現在 log/development.log。 在測試模式的話就會在 log/test.log。 在上線模式的話就會在 log/production.log。

每次寫新的 Rails 程式時,預設是在 development (開發) 模式下跑,所以啟動 伺服器後,log/development.log 裡有資料寫入了,其他的 test.log 和 production.log 目前是空白的。 Log/development.log 的內容如下:

要看 log 不用每次都把檔案打開。 伺服器的系統如是 U/linux 的話,可以用 tail 來即時顯示在螢幕上。 下面這個範例會把開發模式下的 log 顯示在螢幕上,一有新的紀錄就會顯示:

cd /myRailsApp/log
tail -f development.log

設定那種類的 log 要紀錄

你也可以設定在那一種模式下要紀錄那種類的訊息。 例如,開發模式 (development) 的預設值是紀錄所有的 logger,我們如果覺得那太囉唆,只想紀錄比 info 還嚴重訊息,就把 /config/environments/development.rb 打開,把這行字加在最後面:

config.log_level = :info

加完後伺服器重開,網頁重整 (reload),去 log/development.log 裡就會看到新的 log:

新的 log 裡所紀錄的就沒包括 debug 的類型了。

那如果嚴重性 error 以下的都不要呢? 把剛剛的 config.log_level 那行改成

config.log_level = :error

重開 server 後,新的 log 就只有 error 跟 fatal 了:

大部份的人在開發環境裡會紀錄所有類型的 log,在上線環境裡才把 config.log_level 設成 :error,來紀錄比較嚴重的錯誤訊息。

不要紀錄敏感的資料

Rails 1.1.6 版本有新增一個可以不要紀錄敏感資料的功能。 敏感資料為密碼或信用卡號等等。 使用方法如下: 把工作中程式的 app/controllers/application.rb 打開,在

class ApplicationController < ActionController::Base 

下面加一行

filter_parameter_logging "creditcard"

這就會叫 logger 不要紀錄變數名字裡有含 “creditcard” 這字串的資料,像 [customer][primary_creditcard] 跟 [customer][secondary_creditcard] 這兩個變數裡含的資料都不會被記下來。

更好的 logging 方法

Rails 用的 logger 是 ruby 內建的,雖然好用可是功能有點簡單。如要更好的話,就研究 log4r 看看。 log4r 目前跟 rails 的 benchmark 模組有衝突,所以先評估可不可用再細部研究。

如果 logger 已能滿足你的需求,深一步了解可到<a href=http://wiki.rubyonrails.org/rails/pages/logger”>此頁

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.

| Powered by Wordpress Themes

Copyright © 本網站由臺灣國家高速網路與計算中心 格網技術組 贊助
2008 :)