2012-07-07 34 views
5

Tôi đang cố tắt tính năng ghi nhật ký bộ nhớ đệm trong quá trình sản xuất. Đã thành công trong việc nhận SQL để ngừng truy vấn ghi nhật ký, nhưng không may mắn với các mục nhập nhật ký lưu trong bộ nhớ cache. Dòng ví dụ trong nhật ký sản xuất:Cách tắt ghi nhật ký bộ nhớ cache activerecord trong đường ray

CACHE (0.0ms) SELECT `merchants`.* FROM `merchants` WHERE `merchants`.`id` = 1 LIMIT 1 

Tôi không muốn tắt tất cả ghi nhật ký vì tôi muốn báo cáo logger.debug hiển thị trong nhật ký sản xuất. Sử dụng đường ray 3.2.1 với Mysql và Apache. Bất kỳ đề xuất nào?

+1

Tôi muốn biết làm thế nào để làm điều tương tự sử dụng đường ray 2.3.5 – Joelio

Trả lời

-1

Có một vài câu hỏi (this, this, this) như thế này trên SO tất cả với một chủ đề tương tự. Bạn có thể thử đặt này trong một tập tin khởi tạo:

old_logger = ActiveRecord::Base.logger 
ActiveRecord::Base.logger = nil 

Restore logger:

ActiveRecord::Base.logger = old_logger; nil # nil just to suppress some garbage 
+4

như thế nào câu trả lời của bạn liên quan đến 'CACHE (0.0ms)' mục -like? – jdoe

2

Tôi im lặng nhật ký CACHE sử dụng phương pháp được đề xuất bởi các bài liên kết dưới đây.

Tôi đã thay thế trình ghi nhật ký ActiveRecod mặc định bằng trình bao bọc lọc các thư có chứa văn bản không mong muốn, tức là 'CACHE'.

Đầu tiên, tạo một tập tin bên trong config/initializers ví dụ active_record.rb và bên trong các tập tin định nghĩa một lớp wrapper và thay thế các logger kỷ lục hoạt động như thế nào trong đoạn code dưới đây:

# Implementation of logger that ignores messages containing forbidden words 
# here “CACHE” and "Settings Load" 
class CacheFreeLogger < ActiveSupport::TaggedLogging 

    @@excluded = ['Settings Load','CACHE'] 

    def add(severity, message = nil, progname = nil, &block) 
    if message.nil? 
     if block_given? 
     message = block.call 
     else 
     message = progname 
     progname = nil #No instance variable for this like Logger 
     end 
    end 
    if severity > Logger::DEBUG || !(@@excluded.map{|e| message.include? e}.include?(true)) 
     @logger.add(severity, "#{tags_text}#{message}", progname) 
    end 
    end 
end 

#Replace the existing logger with the filtering one 
ActiveRecord::Base.logger = CacheFreeLogger.new(ActiveRecord::Base.logger) if Rails.env.development? 

Các bài gốc mở rộng Logger không TaggedLoggin nhưng nó không làm việc cho tôi.

Phương pháp này đã được đề xuất trong blog: http://heliom.ca/blog/posts/disable-rails-cache-logging

+0

tính năng này không hoạt động với đường ray 5 –

Các vấn đề liên quan