2010-04-05 20 views
8

Tôi muốn thay đổi mức ghi nhật ký của một ứng dụng (ruby).Thiết lập nhật ký ruby ​​có thể định cấu hình: Logger.new(). Level = variable

Vâng, irb không hài lòng với điều đó và đã ném "NameError: tên hằng số sai Logger :: WARN" vào mặt tôi. Ugh! Tôi bị sỉ nhục.

Tôi có thể làm điều này trong trường hợp/khi nào cần giải quyết vấn đề này, hoặc thực hiện log.level = 1, nhưng phải có cách thanh lịch hơn!

Có ai có ý tưởng nào không?

-daniel

Trả lời

15

Tại sao bạn không chỉ sử dụng hằng số chữ trong mã số config?

config = { :level => Logger::WARN } 

Sau đó, bạn không phải đánh lừa xung quanh với const_get hoặc bất kỳ thứ gì tương tự; bạn chỉ cần làm log.level = config[:level].

Nếu nó hoàn toàn phải là một chuỗi, bạn có thể thả tiền tố namespace và gọi const_get trên Logger mô-đun:

irb(main):012:0> Logger.const_get 'WARN' 
=> 2 

Nếu nó thực sự thực sự phải là chuỗi có trình độ, có lẽ bạn thử sử dụng this blog's qualified_const_get method (không được tích hợp sẵn!).

+3

Hằng số không thể được lưu trữ trong cấu hình, vì cấu hình được tải từ tệp yaml, nhưng Logger.const_get 'WARN' hoạt động tốt cho tôi! – Daniel

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