2009-06-03 30 views
9

是否有某種方法可以通過script/runner運行的腳本禁用所有日誌記錄(無論是來自ActiveRecord,Rails的其他部分,插件等)?我有一個長時間運行的數據加載腳本,它產生了一個荒謬的無用日誌信息。我是而不是試圖改變script/runner的環境(例如,生產,開發等) - 腳本目前需要在「開發」環境中運行,並且目前這樣做沒有問題。從腳本/運行器禁用Rails日誌記錄

我想要做的就是在腳本的生命週期內取消所有日誌記錄。從閱讀文檔看,如果我可以得到它的Rails::Configuration的句柄,我應該能夠將log_level設置爲:debug以外的值或將其logger設置爲nil。我在正確的軌道上嗎?如果是這樣,我該如何訪問其對象Rails::Configuration

回答

26

我可以想到幾種方法。

1)設置日誌級別如此之高,那什麼事都記錄:

ActiveRecord::Base.logger.level = Logger::Severity::UNKNOWN 

更多有關見Logger::Severity。 UNKNOWN是最高的。

「level」只是一個數字,所以如果您覺得偏執,那麼它可以設置爲Logger :: Severity :: UNKNOWN + 1。 :)

2)將輸出發送到/ dev/null。

ActiveRecord::Base.logger = Logger.new('/dev/null') 

(我假設有是使用Rails的記錄器只是一個實例,它是你的ActiveRecord通過:: Base.logger得到一個。如果有更多的人你會必須找到他們,並與他們撥弄。)

如果你不喜歡這些,你可能會發現其他的東西,通過閱讀Logger文檔。

+0

啊哈!這正是我所期待的。謝謝! – 2009-06-04 18:15:56

+0

我把activerecord :: Base.logger.level = Logger :: Severity :: UNKNOWN放在enviroment.rb的末尾,並且工作正常。 (做config.log_level =:info似乎不適用於雜種狗) – Tod 2010-11-27 05:45:52

+0

第二個是我打賭,謝謝! – Jirapong 2011-08-29 08:31:49

0

這些設置位於config/environments/*。rb文件中,它們將覆蓋environment.rb的默認值。當它「Rails :: Initializer.run do | config |」它與配置對象一起運行。我相當肯定你可以改變以滿足你的需求,但是我不確定你如何通過一個標誌說它是一個當前正在執行的腳本/運行腳本。

(我知道你說你在不斷變化的環境不感興趣,但我想我會扔在那裏,你可以create a new env爲具有大部分相同的設置數據加載腳本,但沒有記錄很容易)

+0

呵呵。這是一個不錯的想法,也許我會試試看。 但是,據您所知,沒有辦法在飛行中覆蓋配置設置? – 2009-06-03 21:24:27

+0

我不知道任何;環境運行後,我甚至不確定您是否可以訪問設置的值。 – 2009-06-03 22:40:01