在rails中,我希望将一些信息记录在不同的日志文件中,而不是标准的development.log或production.log。我想从一个模型类来做这个日志记录。
发布于 2008-12-03 17:21:33
您可以从任何模型中自己创建Logger对象。只需将文件名传递给构造函数并像通常的Rails logger
一样使用对象
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
类中(或者,如果您不喜欢过多地使用补丁,也可以注入到您自己的超类中),以便在应用程序的模型之间共享代码。
发布于 2012-03-01 01:57:29
对我来说,一个不错的选择是只向app/models
文件夹中添加一个相当简单的类,比如app/models/my_log.rb
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");
或类似操作的任何地方,您可以将如下所示的日志记录到自定义文件中
MyLog.debug "Hello world"
发布于 2017-05-25 05:26:04
在(比如说)app/models/special_log.rb中定义一个记录器类:
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中初始化记录器:
SpecialLog.logger = Logger.new(SpecialLog::LogFile)
SpecialLog.logger.level = 'debug' # could be debug, info, warn, error or fatal
在您的应用程序中的任何位置,您都可以使用以下命令登录:
SpecialLog.debug("something went wrong")
# or
SpecialLog.info("life is good")
https://stackoverflow.com/questions/337739
复制相似问题