2013-02-19 215 views
2

我的Rails.logger很好用,非常感謝,但我會喜歡它寫入STDOUT(也就是說,不要放棄登錄到日誌文件,而是要「發球臺「它輸出)。使Rails.logger tee寫入標準輸出

這可能在Rails 3中嗎?

+0

'tail -f $ YOUR_LOG_FILE'有什麼問題? – mudasobwa 2013-02-19 09:47:07

回答

-1

底部在您的環境配置添加此

Rails.logger = Logger.new(STDOUT) 
+2

他希望他的記錄器寫入stdout和日誌文件,而不僅僅是標準輸出 – ksol 2013-02-19 09:10:11

+0

好。我顯然跳過了他的問題的'也'部分。 – jvnill 2013-02-19 09:12:06

+0

這仍然有用 – LetMeSOThat4U 2013-02-20 13:38:10

1

這個簡單的委託記錄應當(*)做的伎倆:

class MultiLogger 
    def initialize *loggers 
    @loggers = loggers 
    end 

    def method_missing *args, &blk 
    @loggers.each {|l| l.send *args, &blk } 
    end 

    def respond_to_missing? *args 
    @loggers.all? {|l| l.respond_to? *args } 
    end 
end 

Rails.logger = MultiLogger.new Rails.logger, Logger.new($stdout) 

(*)我還沒有嘗試過

+0

對不起,這不起作用:更多的寫入控制檯比日誌文件 - 在我的情況下,只有sql語句記錄,而控制檯也包含普通的「puts」和漂亮的打印機(PP.pp) 。雖然我不確定這是否是代碼的錯誤,因爲遺留代碼與日誌記錄有很大關係。 – LetMeSOThat4U 2013-02-21 12:13:28

+0

好吧,顯然你的記錄不是全部都要經過記錄器。你沒有解釋爲什麼你需要這個功能。你不能只使用外部工具,例如:'tail -f'? – dbenhur 2013-02-21 15:54:29

+0

您可以使用'ObjectSpace#each_object'在非日誌記錄日誌中作弊,以查找所有對您的日誌文件開放的'File'對象,並將它們重新打開到管道'| tee logfile'。 – dbenhur 2013-02-21 15:57:17