首页 > 解决方案 > 如何创建自定义异常(包括明确控制值 null)并将所有异常保存在 Rials 5.2 的日志文件中

问题描述

首先,我需要使用 try-catch (begin-rescue) 构造来捕获控制器中每种方法的特定错误。我认为 try-catch 是在 Rails 中开始救援建设是对的吗?

什么最佳实践是创建自定义异常,包括显式控制值 null?

将所有异常保存在日志文件中的方法是什么?

例如,当此函数未接收任何参数时,我使用此代码捕获标准错误。

  1. 如何为这种情况创建自定义异常?game_number什么时候nill
  2. 如何使用特定的日志管理库(log4xxx、logging-rails、logging)将这些错误写入独立的日志文件?
def fizz_buzz(game_number)
    # list of the numbers, starting from @game.number
    begin
      serie_num = (game_number..Constants::LAST_NUMBER_FIZZBUZZ).to_a
    rescue StandardError => e
      print e
      # how to save this error to independent file using logging lib?
      # how using custom exception for catch errors like this - 
      # game_number = nill?
    end

    new_num = serie_num.map do |num|
      if num % 3 == 0 and num % 5 == 0
        num = 'fizzbuzz'
      elsif num % 3 == 0
        num = 'fizz'
      elsif num % 5 == 0
        num = 'buzz'
      elsif num % 3 != 0 and num % 5 != 0
        num = num
      end
    end

    return new_num.join(', ')
  end

以这种方式使用开始救援构造是否正确?

我使用以下代码语句config\enviroments\development.rb来创建新的记录器以写入独立文件,但只得到一个几乎空的文件。

config.Logger = Logger.new(ENV["PWD"] + '/fizzbuzz_log.log')

进入fizzbuzz_log.log了这个:

# Logfile created on 2019-06-03 11:47:36 +0200 by logger.rb/56438

先感谢您。

标签: ruby-on-railsexceptionloggingtry-catch

解决方案


class YourCustomError < StandardError
 attr_accessor :message

 def initialize(message)
    @message = message
 end

  def to_s
    "[#{message}] #{super}"
  end
end

这就是如何创建自己的错误类。进而

 begin
   serie_num = (game_number..Constants::LAST_NUMBER_FIZZBUZZ).to_a
 rescue YourCustomError => e
  #Use logging lib to log or do custom error handling
end

并且在您的自定义方法中,每当您认为错误时,请执行此操作。

raise YourCustomError.new("Error Occured. Contact the System Admin") # the message can be anything specific to your business domain's problem.

推荐阅读