2013-06-26 23 views
5

Tôi muốn đăng nhập mọi thứ từ bên trong một phần mềm trung gian mà tôi đang đưa vào ứng dụng Rails, bằng cách sử dụng trình ghi nhật ký hiện có của ứng dụng. Có cách nào tiêu chuẩn để làm điều này không? Hai khả năng mà tôi suy nghĩ:Trình ghi nhật ký Rails có thể được truy cập từ bên trong một phần mềm trung gian Rack không?

  1. logger là truy cập trực tiếp trong môi trường giá
  2. các loger có thể được truy cập tại thời gian khởi động ứng dụng và giao cho middleware

Đang tìm kiếm các giải pháp liên quan đến một trong hai trong số này không có nhiều. Tôi đã không suy nghĩ đầy đủ thông qua/thử nghiệm để xem liệu thứ tự của các hoạt động cho phép hoặc là có thể.

+1

bạn có thể thử gọi ra Rails.logger và xem ... – rogerdpack

+0

Bạn biết gì về 'Rails' dựa vào tên của nó và quy tắc đặt tên Ruby? –

Trả lời

2

Tôi đã có thể làm điều này để hoạt động bằng cách viết phần mềm trung gian của riêng tôi mà chỉ cần thêm Rails.logger vào môi trường Rack.

module Something 
    class UseRailsLogger 
    def initialize(app) 
     @app = app 
    end 
    def call(env) 
     env['rack.logger'] ||= Rails.logger 
     @app.call(env) 
    end 
    end 
end 

Nếu bạn giấu rằng trong lib/something/use_rails_logger.rb, sau đó bạn có thể thêm nó vào middleware ngăn xếp của bạn và logger sẽ có sẵn cho mỗi lớp mà đến sau khi nó.

Lưu ý: Tôi muốn thêm nó vào config/application.rb vì không có lý do nào cho cài đặt này phụ thuộc vào môi trường, nhưng vì một lý do nào đó, require 'something/use_rails_logger' sẽ không hoạt động từ tệp đó. Thêm nó vào config/environment/*.rb chỉ hoạt động tốt. Bên cạnh require tất cả các bạn cần là:

config.middleware.use Rack::UseRailsLogger 
Các vấn đề liên quan