2015-04-05 59 views
3

我正在創建應該在Rails內部和外部運行的gem。我不想重新發明輪子,因此我要麼使用默認記錄器,要麼爲用戶創建自己的能力。如何確定Rails中日誌設備的類型

我有彩色的日誌。

創建日誌設備我自己,我可以很容易地檢查它是否是一個tty與否:

@logger = Logger.new(name) 
@colorize = (IO === name) && name.tty? 

現在終端將獲得彩色輸出,其他的一切不會。這工作得很好。

試想一下,雖然我得到了鋼軌logger一個實例:

@logger = Kernel.const_defined?(Rails) ? Rails.logger : Logger.new(name) 

只有這樣,才能確定它是否是一個長相tty ...嗯太醜陋:

Rails.logger 
    .instance_variable_get(:@logger) 
    .instance_variable_get(:@log) 
    .instance_variable_get(:@logdev) 
    .instance_variable_get(:@dev) 
    .tty? 

上午我遺漏了什麼?有沒有更好的方法來理解Rails logger是否將輸出吐在終端上?

回答

0

也許你可以依靠用戶的選擇,通過使用config.colorize_logging來決定(何時使用Rails運行)?

+0

在自動測試環境等中沒有「用戶」。此外,有時我會將三個不同的記錄儀附加到一個過程中,只有一個需要着色。當然,只要明確要求,我就可以顯示顏色,但這太煩人了。無論如何。問題是關於如何自動檢索此信息。 – mudasobwa 2015-04-07 04:54:44

+0

「用戶」我的意思是將使用你的寶石。也許使用全局導軌設置並不是那麼有趣,比如將所有東西都着色:)但是因此,您將避免陷入只有部分導軌日誌變色的情況,儘管它在設置中顯式禁用。順便說一下,它默認爲true。 – 2015-04-07 11:08:27