2012-08-09 99 views
1

我有一個模型,但我不希望它寫入常見的日誌其查詢。是否有可能爲某個模型切換記錄器?Rails 3模型記錄器

+1

請參閱http://stackoverflow.com/questions/6233401/custom-logger -in-rails-3 – iltempo 2012-08-09 12:13:19

+0

這是用於完整應用的記錄器。我想爲模型 – 2012-08-09 12:40:03

回答

2

你可以這樣做替換STDOUT:

創建自定義記錄器,如果你想格式化differently.You可以忽略這一點,如果格式需要是相同的。

class ModelLogger < Logger 
    def format_message(severity, timestamp, progname, msg) 
    "#{timestamp.to_formatted_s:)db)} #{severity} #{msg}\n" 
    end 
end 

在config /初始化/,創建logs.rb和補充一點:

model_logfile = File.open("#{RAILS_ROOT}/log/model.log", 'a') 
model_logfile.sync = true 
MODEL_LOG = ModelLogger.new(model_logfile) 

現在,您重新啓動服務器後,

MODEL_LOG.debug "This will be logged to model.log" 
MODEL_LOG.error "Errors also can be logged." 
+0

有一些單獨的記錄器我知道這一點。但該模型將其sql查詢寫入日誌,我想忽略其中的一些 – 2012-08-09 13:50:47

1

我用推核心寶石,它會在日誌中寫下許多令人討厭的消息,如下所示,每2秒鐘:

Push::Message Load (0.6ms) SELECT "push_messages".* FROM "push_messages" ... 

我已經添加以下代碼初始化器,以便從日誌中刪除「推::消息Load」事件:

# Disable annoying (every 2 sec) "Push::Message Load" events 
ActiveRecord::LogSubscriber.class_eval do 
    alias_method :old_sql, :sql 

    def sql(event) 
    return if event.payload[:name] =~ /Push::Message Load/ 
    old_sql(event) 
    end 
end