如何使用默认的Railslogging器loggingRubyexception的整个踪迹?
我正在rails项目,我正在尝试获取exceptionlogging到rails日志文件。 我知道我可以调用logger.error $!
获取logging到文件的exception的第一行。 但是,我想要获取整个跟踪堆栈。 如何使用默认的轨道logging器logging一个exception的整个轨迹?
logger.error $!.backtrace
另外,不要忘记你可以
rescue ErrorType => error_name
给你的错误一个variables名称以外的默认$!
。
轨道是这样的
137 logger.fatal( 138 "\n\n#{exception.class} (#{exception.message}):\n " + 139 clean_backtrace(exception).join("\n ") + 140 "\n\n" 141 ) 248 def clean_backtrace(exception) 249 if backtrace = exception.backtrace 250 if defined?(RAILS_ROOT) 251 backtrace.map { |line| line.sub RAILS_ROOT, '' } 252 else 253 backtrace 254 end 255 end 256 end
在Rails的后续版本中,只需在RAIL_ROOT / config / initializers / backtrace_silencers.rb中取消注释以下行(如果不存在则添加此文件本身):
# Rails.backtrace_cleaner.remove_silencers!
通过这种方式,您可以将完整的回溯写入日志中的exception。 这在v2.3.4中适用于我。
logger.error caller.join("\n")
应该做的伎俩。
在Rails中, ActionController::Rescue
处理它。 在我的应用程序控制器的行动,我使用从这个模块的方法log_error
格式在日志回溯:
def foo_action # break something in here rescue log_error($!) # call firemen end
以下是我将如何做到这一点:
以下是Exception#backtrace的ri文档:
请注意,你也可以使用Kernel#caller,它可以给你完整的trace(减去框架)。
另外 – 请注意,如果您试图捕获所有exception,则应该从Exception中解救出来,而不是RuntimeError。