2009-09-10 39 views
4

我已經想出瞭如何通過將操作方法​​內的所有內容包裝在logger.silence塊中來靜音操作的內容。如何將呼叫全部停止在軌道控制器的動作上

但是,我仍然接到對日誌文件中顯示的操作的調用。

IE:

Processing DashboardController#update (for 66.201.17.166 at 2009-09-09 19:03:27) [GET] 
    Parameters: {"todos"=>{"user"=>"25", "sfu_type"=>""}} 
Completed in 1021ms (View: 439, DB: 438) | 200 OK [http://my.host.com/dashboard/update?todos%5Buser%5D=25&todos%5Bsfu_type%5D=] 

我想要麼保留以上從得到寫入日誌都在一起,或將其重定向到一個不同的日誌文件(即dashboard.log),所以它停止塞滿了生產.log文件。

每次登錄每個用戶的ajax調用更新時,我都會將上面的示例寫入日誌。每2分鐘更新一次,這樣生產日誌文件就會充斥着無用的日誌消息。

回答

7

晚的答案,但我花了相當多的interwebs的時間尋找答案,這是這樣的:

在包含你想忽略的動作控制器,重寫記錄方法和返回對於某些操作,導軌默認爲自定義記錄器,對於需要特殊處理的記錄器則爲零。

def logger 
    if params[:action] == 'action_to_ignore' 
    # return custom logger or nil 
    else 
    RAILS_DEFAULT_LOGGER 
    end 
end 

我懷疑有一個更簡單的方法,並希望聽到它,如果它存在。

+0

你是贏家!這很好....感謝! – Streamline 2009-12-29 12:23:09

+1

在rails3中不起作用,至少對我來說 – 2011-05-12 19:37:06

+0

似乎適用於Rails 3,而且在運行時也是如此:生產環境在本地,但在Heroku上似乎不起作用。 Heroku繼續輸出「Render」消息。有任何想法嗎? – 2013-03-20 02:25:33

0

您是否設置了生產日誌級別?

配置>環境> production.rb

config.log_level =:警告(默認爲:信息)

+0

是 - 無論日誌級別是什麼,你仍然可以在日誌 – Streamline 2009-09-10 07:13:51

1

logger調用分散各地ActionController::Base。我能想到的唯一方法是猴子修補一堆方法,並檢查有問題的控制器的名稱。

也許重寫this method是你所需要做的。不確定。祝你好運:)

+0

這可能是唯一可用在控制器/動作項方法來刪除此信息的日誌記錄 - 將不得不調查此在某些時候看 - 謝謝 – Streamline 2009-09-18 18:21:43

+0

僅供參考,只是做了類似的事情。如果您覆蓋控制器的'logger'實例方法,則將完全禁用日誌記錄。 – 2009-09-18 19:42:47

0

在應用程序控制器,你可以覆蓋記錄:

def log_error(exception) 
    #super(exception) 
    #do my logging here 
end 

我用這個時候出現在關鍵的應用程序錯誤,給我發電子郵件。

+0

或者我可以用你的問題而不是寫我在做什麼 – 2009-09-10 16:52:34

+0

Reuben,我認爲這仍然只是處理控制器操作被調用後發生的日誌記錄與修改記錄的信息調用控制器/操作 - 正確嗎? – Streamline 2009-09-18 18:19:26