ruby-on-rails - 如何创建自定义异常(包括明确控制值 null)并将所有异常保存在 Rials 5.2 的日志文件中
问题描述
首先,我需要使用 try-catch (begin-rescue) 构造来捕获控制器中每种方法的特定错误。我认为 try-catch 是在 Rails 中开始救援建设是对的吗?
什么最佳实践是创建自定义异常,包括显式控制值 null?
将所有异常保存在日志文件中的方法是什么?
例如,当此函数未接收任何参数时,我使用此代码捕获标准错误。
- 如何为这种情况创建自定义异常?
game_number
什么时候nill
- 如何使用特定的日志管理库(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
先感谢您。
解决方案
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.
推荐阅读
- javascript - request.onprogress 没有做任何事情
- model-view-controller - MVC 5 - 从视图中向@User 添加方法
- r - 在 R 中读取文本文件中的分组
- sas - SAS:如何在程序退出时或通过宏删除查询输出文件(.sasbdat7 和 .log)?
- c++ - 在头文件的B类中调用方法A?
- android - Mediapipe 样本与最新版本的“androidx.camera”不兼容
- postgresql - 类型ORM外键
- elasticsearch - Logstash、Filebeat、ELK 堆栈
- javascript - 无法多次按下重置按钮
- c# - 有没有更好的方法来减少 if 语句