2014-07-07 46 views
0

我是Ruby/Rails編程新手,仍然在找我。我已經按照this教程創建了一個示例Web應用程序。它工作正常。它使用Ruby 1.9.3版本和Rails 4.0.8版本。如何讓Rails在日誌語句中顯示標準的有用信息?

但是我想實現日誌記錄。所以我插入以下lineq到我的控制器之一:

logger.debug "Hello! I'm a DEBUG message" 
logger.info "Hello! I'm an INFO message" 

這產生了以下日誌:

Hello! I'm a DEBUG message 
Hello! I'm an INFO message 

這不是太大的幫助。我想在日誌輸出中看到更多細節。這個日誌什麼時候創建的?日誌級別是什麼?這個日誌的文件名和行號是什麼?我想看到所有這一切。

所以我實現瞭解決方案通過創建具有以下內容的文件配置/初始化/ logger.rb描述here

class Logger::SimpleFormatter 
    def call(severity, time, progname, msg) 
    "[#{severity} #{time} #{caller(0).first.match(/.*:\d+/)[0]}] #{msg}\n" 
    end 
end 

但它沒有什麼區別。日誌行仍然是裸露的,沒有我正在尋找的任何其他重要信息。如何解決這個問題?爲什麼沒有創建我的logger.rb有什麼影響?

+0

我推薦使用驗證寶石 –

+0

只是很簡單.... user.authenticate(1) –

+0

此評論不夠詳細,不提供任何解釋。 –

回答

1

在Rails 4中,所有模式的默認記錄器(production除外)爲ActiveSupport::Logger::SimpleFormatter。看到這裏的文檔:http://guides.rubyonrails.org/configuring.html#rails-general-configuration

所以,你需要logger.rb是:

class ActiveSupport::Logger::SimpleFormatter 
    def call(severity, time, progname, msg) 
    "[#{severity} #{time} #{caller(0).first.match(/.*:\d+/)[0]}] #{msg}\n" 
    end 
end 

請注意,這不會在生產模式下工作。對於production,如果需要,您必須自定義Logger::Formatter

+0

謝謝!但是這總是顯示行:/ <路徑根目錄> /logger.rb:3。我怎樣才能改變它,讓它顯示* calling *行的文件和行號。 –

+1

沒有簡單的方法來獲取文件信息,除非你在消息本身中寫入,比如'logger.debug「SomeController:12來自第12行的消息''。我會說完全拿掉'caller(0)'部分,因爲它非常沒用。除非有人有更好的想法。 – San

0

我真誠地不明白爲什麼登錄軌道是如此「光禿禿」。默認的記錄器軌道使用甚至更好,但軌道愚蠢它進一步下降。

事情我需要在日誌記錄:

  • 時間戳
  • 嚴重性
  • 最好主機處理(用於連接多個日誌文件)

有一些很好的選擇,雖然,你可以看看:

  • log4r:一個強大的記錄器,我已經使用了它幾次,但沒有記錄得很好。也不確定它是否仍然保持。
  • 最近我繼續使用better_logging這是一個稍微不強大的功能,但需要更少的配置才能使用,默認情況下完全滿足我的需求(而自定義字符串選項則是最終效果)。
+0

我也需要文件名和行號。 任何診斷爲什麼我的解決方案無法正常工作? –

相關問題