如何在我的rubygem中写入将在rails应用程序中使用的日志?

时间:2015-06-03 14:42:51

标签: ruby-on-rails ruby logging

我正在开发一种将用于rails应用程序的rubygem。在这个rubygem我需要记录一些信息(警告,错误......)。

我看到了一些宝石,比如logging,但显然我不需要配置日志输出(stdout,某些文件)。
我的rails应用程序将消息记录在文件中。所以,我的问题是:有没有办法让我的gem使用我的rails应用程序使用的相同日志配置?或者我的gem会根据自己的配置发送日志吗?

1 个答案:

答案 0 :(得分:8)

您可以直接使用Rails.logger,如果您的gem始终只在Rails应用程序中使用,则该Rails.logger有效。您也可以为gem命名空间定义一个记录器,如果定义则默认为Logger.new(STDOUT),如果不是,则为module MyGem def self.logger @@logger ||= defined?(Rails) ? Rails.logger : Logger.new(STDOUT) end def self.logger=(logger) @@logger = logger end end ,以及作者,因此它可以覆盖:

MyGem.logger.debug "it works"

无论如何,你都会这样使用它:

 MagicalRecord.saveWithBlock({   (moc: NSManagedObjectContext!) in                

      //parsing inquiries
      for (index: String, jsonInquiry: JSON) in json["data"]["inquiries"] {

           var idInquiry =  jsonInquiry["id_inquiry"].int! 
           var inquiry: Inquiry

           //trying to find existing entity
           if let existingInquiry = Inquiry.MR_findFirstByAttribute("id", withValue: idInquiry, inContext: moc) as? Inquiry {
                inquiry = existingInquiry
                println("fetching existing inquiry: \(idInquiry)")
            } else {
                inquiry = Inquiry.MR_createInContext(moc) as! Inquiry
                println("creating new inquiry: \(idInquiry)")
            }
            ...
       }
  }