我的 Rails 應用程式在 Heroku 中運行;最近,我們將 Heroku LOG_LEVEL 更改為 WARN,因為系統日志中充斥著大量不需要的資訊。但是,在某些領域,我還是想使用 Rails.logger.info;
目前,在 Heroku 中,我們有這個:
LOG_LEVEL = WARN
在production.rb中,仍然是
config.log_level = :info
config.log_formatter = ::Logger::Formatter.new
上面的配置我們沒有改變它,因為如果我們設定它,優先級是 LOG_LEVEL。因此,對于上述配置,如果我們將Rails.logger.info "Hello world,"其設定為無效,因為記錄器只會處理等于或更高的日志以警告重要性。
所以我們嘗試了另一種方式。
創建了一個名為custom_logger.rb;的新初始化程式 我們把
$INFO_LOGGER = Rails.logger.dup
$INFO_LOGGER.level = :info
然后無論我們想在哪里使用資訊,我們都稱它為$INFO_LOGGER.info "Hello World,"prints
這是一種正確的方法,比如使用全域變數嗎?
uj5u.com熱心網友回復:
這是一種正確的方法,比如使用全域變數嗎?
這個問題可以被認為是基于意見的,所以我認為我不會推薦它。此外,標題中提出的問題是關于自定義記錄器的,雖然我們可以實施一個以促進請求,但我會提出一個更簡單的解決方案,該解決方案仍將準確記錄您想要的內容,到當前日志檔案,而無需自定義記錄器、輔助記錄器或任何型別的全域變數。
我的建議:
RailsActiveSupport::Logger默認使用它本質上只是一個 rubyLogger?? 。
如果您總是希望記錄某些訊息,無論level您可以使用Logger#unknown.
根據課程的檔案Logger:
級別:
UNKNOWN - 應始終記錄的未知訊息。
記錄器#unknown
記錄 UNKNOWN 訊息。無論記錄器的級別是什么,都會列印出來。
因此,您可以將其用于您始終想要顯示的訊息,同時仍避免標準資訊訊息的噪音:
例如:
Rails.logger.info "Noisy message" # won't show when LOG_LEVEL > INFO
Rails.logger.unknown "VERY IMPORTANT MESSAGE" # will show no matter what the level is set to
uj5u.com熱心網友回復:
您不想使用全域變數。而是創建一個自定義類,例如
class MyLogger
class << self
def info(*args)
new.info(*args)
end
end
delegate :info, to: :logger
attr_reader :logger
def initialize
@logger = ActiveSupport::Logger.new(Rails.root.join("log/my_logger.#{Rails.env}.log"))
@logger.formatter = ::Logger::Formatter.new
end
end
現在您可以呼叫MyLogger.info("this is a test message"),它會在日志檔案中輸出訊息,無論是LOG_LEVEL或config.log_level = :info
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/518117.html
標籤:轨道上的红宝石heroku日志记录ruby-on-rails-5
上一篇:部署到Firebase托管后出現Http錯誤代碼403
下一篇:heroku發送帖子作為選項接收
