2012-08-09 98 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