2010-06-05 30 views

Trả lời

37

Có hai cách để đi về nó:

  • Giả sử thư viện của bạn được khép kín và có một mô-đun, bạn có thể thêm một thuộc tính logger để mô-đun của bạn và sử dụng ở khắp mọi nơi trong mã thư viện của bạn.

    Sau đó bạn có thể sử dụng một initializer trong config/initializers/, hoặc một config.after_initialize khối trong config/environment.rb để khởi logger của bạn, như vậy:

    require 'mylibrary' 
    MyLibrary.logger = Rails.logger 
    

    này vẫn sẽ cho phép bạn sử dụng thư viện khép kín của bạn từ các kịch bản bên ngoài Rails. Đó là tốt đẹp, nhân dịp.

  • Nếu sử dụng thư viện của bạn mà không có Rails thực sự không có ý nghĩa gì cả, thì bạn cũng có thể chỉ sử dụng trực tiếp Rails.logger.

Trong cả hai trường hợp, bạn đang xử lý một Trình ghi nhật ký chuẩn của Ruby. Cũng nên nhớ rằng, về lý thuyết, logger có thể là nil.

+0

Cảm ơn bạn, đây chính xác là những gì tôi đang tìm kiếm. – drt

+3

NB: Câu trả lời này chứa thông tin không chính xác và người chỉnh sửa không muốn tôi sửa chúng. Trừ khi (có lẽ) bạn đang sử dụng Rails cũ hơn 2.0, bạn KHÔNG "đối phó với một bản ghi chuẩn của Ruby". Rails hiện sử dụng [ActiveSupport :: BufferedLogger] (http://apidock.com/rails/ActiveSupport/BufferedLogger). Nếu bạn quyết định khởi tạo trình ghi nhật ký riêng biệt (ví dụ) một công việc cron được chứa trong dự án Rails, để tránh 'gây ô nhiễm' nhật ký Rails tiêu chuẩn. Trong trường hợp này, hãy đảm bảo bạn sử dụng 'ActiveSupport :: BufferedLogger.new' thay vì chỉ' Logger.new'. Tôi đã thử nó và nó không hoạt động. – Lambart

16

Chúng tôi có thể sử dụng trình ghi nhật ký Rails trực tiếp vào thư viện, xem đoạn mã sau.

require 'logger' 

Rails.logger.info "Hay..!!! Im in lib" 
Rails.logger.debug "Debugging this object from Lib #{object.inspect}" 
Rails.logger.error "This is an error..." 
+3

Điều này làm việc cho tôi, cuối cùng, sau khi tôi nhận ra tôi cần phải . Nó hoàn toàn hiển nhiên, một khi bạn biết điều đó, nhưng không rõ ràng với tôi trong một thời gian. –

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