首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在独立的日志文件中记录Rails中的内容?

如何在独立的日志文件中记录Rails中的内容?
EN

Stack Overflow用户
提问于 2008-12-03 16:24:12
回答 7查看 82K关注 0票数 163

在rails中,我希望将一些信息记录在不同的日志文件中,而不是标准的development.log或production.log。我想从一个模型类来做这个日志记录。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-12-03 17:21:33

您可以从任何模型中自己创建Logger对象。只需将文件名传递给构造函数并像通常的Rails logger一样使用对象

代码语言:javascript
复制
class User < ActiveRecord::Base
  def my_logger
    @@my_logger ||= Logger.new("#{Rails.root}/log/my.log")
  end

  def before_save
    my_logger.info("Creating user with name #{self.name}")
  end
end

在这里,我使用了一个class属性来记录记录器。这样,就不会为创建的每个用户对象创建它,但您也不需要这样做。还要记住,您可以将my_logger方法直接注入到ActiveRecord::Base类中(或者,如果您不喜欢过多地使用补丁,也可以注入到您自己的超类中),以便在应用程序的模型之间共享代码。

票数 197
EN

Stack Overflow用户

发布于 2012-03-01 01:57:29

对我来说,一个不错的选择是只向app/models文件夹中添加一个相当简单的类,比如app/models/my_log.rb

代码语言:javascript
复制
class MyLog
  def self.debug(message=nil)
    @my_log ||= Logger.new("#{Rails.root}/log/my.log")
    @my_log.debug(message) unless message.nil?
  end
end

然后在您的控制器中,或者几乎可以从rails应用程序中引用模型类的任何地方,即可以执行Post.create(:title => "Hello world", :contents => "Lorum ipsum");或类似操作的任何地方,您可以将如下所示的日志记录到自定义文件中

代码语言:javascript
复制
MyLog.debug "Hello world"
票数 38
EN

Stack Overflow用户

发布于 2017-05-25 05:26:04

在(比如说)app/models/special_log.rb中定义一个记录器类:

代码语言:javascript
复制
class SpecialLog
  LogFile = Rails.root.join('log', 'special.log')
  class << self
    cattr_accessor :logger
    delegate :debug, :info, :warn, :error, :fatal, :to => :logger
  end
end

在(比如)config/initializers/special_log.rb中初始化记录器:

代码语言:javascript
复制
SpecialLog.logger = Logger.new(SpecialLog::LogFile)
SpecialLog.logger.level = 'debug' # could be debug, info, warn, error or fatal

在您的应用程序中的任何位置,您都可以使用以下命令登录:

代码语言:javascript
复制
SpecialLog.debug("something went wrong")
# or
SpecialLog.info("life is good")
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/337739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档