Rails格式化日志以与aws-logs和CloudWatch一起使用

时间:2016-06-13 14:18:27

标签: ruby-on-rails ruby amazon-web-services ruby-on-rails-5

AWS使用aws-logs

这个非常酷的日志收集工具

但是,我不明白如何格式化日志/将工具配置为更智能并重新组合相同的错误消息。现在AWS每行显示一条消息(因为每一行都有时间戳)

enter image description here

我当前的日志配置确实会为每条消息捕获一个新的日志条目。我怎么能绕过它

[rails/production.log]
file = /var/www/xxx/shared/log/production.log
log_group_name = /rails/production.log
log_stream_name = {instance_id}
time_zone = LOCAL
datetime_format = %Y-%m-%dT%H:%M:%S

1 个答案:

答案 0 :(得分:0)

我实际上部分解决了使用lograge和JSON输出的问题,该输出由亚马逊正确解析并允许您正确地重新组合大多数请求。

但是我仍然遇到一些错误问题,这些问题没有以相同的方式输出,并且仍然在awslogs上为每个调用堆栈跟踪生成一行

编辑:我们现在正在使用Rails API,并且在使用json:api错误处理程序渲染器拯救JSON请求期间抛出的常规异常。此外,我们使用Rollbar记录实际错误,因此与完整错误日志

无关

在我们的API :: ApplicationController

# We don't want error reports for those errors
RESCUABLE_ERRORS = [
  ActionController::ParameterMissing,
  ActiveModel::ForbiddenAttributesError,
  StrongerParameters::InvalidParameter,
  Mongoid::Errors::Validations,
  Mongoid::Errors::DocumentNotFound
]

# Note that in tests, we want to actually do not want to rescue non-Runtime exceptions straight away because most likely this indicates a real bug that you should fix, but in production we want to rescue any error so the frontend does not get the default HTML response but a JSON:api error
rescue_from(Rails.env.test? ? RuntimeError : Exception) do |e|
  handle_exception(e)
  notify_exception(e, 'Rescued from API controller - Rendering JSONAPI Error')
end

rescue_from(*RESCUABLE_ERRORS) do |e|
  handle_exception(e)
end

在我们继承API :: ApplicationController的控制器中,我们添加了rescue_from行,这取决于我们是要将异常报告为错误(notify_exception)还是仅转换为JSON有效负载( handle_exception

rescue_from(SPECIFIC_ERROR_CLASS) do |exception|
  handle_exception(exception) # will render a json:api error payload
  # notify_exception(exception) # Optional : ExceptionNotifier to broadcast the error to email/Rollbar, etc. if this error should not happen.
end

设置为格式化常规JSON错误有效负载,这些有效负载成为refular请求,而错误本身则被拯救