2013-03-07 35 views
2

這是什麼適當的方法:我有一個可以使用或不使用導軌的gem - 如果使用導軌內部,我想重新使用rails-services例如配置的記錄器。如果它不在rails中(例如在sinatra-app中),我想從stdlib回退Logger:如果我們在rails應用程序中或者不在rails中,什麼是安全的方式來確定gem?!登錄內部和外部導軌使用的寶石

我已經試過方法,如:

@logger = defined?("Rails") ? eval("Rails.logger") : Logger.new(STDOUT) 

但這只是給了我一個 「未初始化的常量」 ......

回答

3

如此接近!刪除引號/ EVAL:

@logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT) 

我也建議您提供一個配置掛鉤,用戶可以指定一個Logger兼容的日誌接收器。默認很好,但有時你需要配置一些東西。