Git Product home page Git Product logo

ans-handle_standard_error's Introduction

Ans::HandleStandardError

コントローラに include すると standard error を rescue するようになる

Installation

Add this line to your application's Gemfile:

gem 'ans-handle_standard_error'

And then execute:

$ bundle

Or install it yourself as:

$ gem install ans-handle_standard_error

Usage

class Posts < ActionController::Base
  include Ans::HandleStandardError

  private

  def rescue_from_standard_error_render(e)
    render "not_found", status: 500
  end
end

production 環境の場合のみ、 rescue_from StandardError, with: :rescue_from_standard_error を設定する

最終的な表示の部分は rescue_from_standard_error_render メソッドによって行う

このメソッドには、発生した例外が渡される

デフォルトは発生した例外を再度 raise

エラーログは例えば以下のように確認する

$ grep -f log/error.log log/production.log -A 100 -B 100

生成されるログ

logger で発生した例外メッセージと、バックトレースを出力する

これにより、通常のログファイルにエラーが書き込まれる

エラーメッセージにはハッシュタグを含め、ハッシュタグは error.log に出力する

logger は通常のログファイルに書き込むので、

  • エラーが起こったこと
  • エラーの位置

の検出が難しい

これをハッシュタグで解決しようとしている

ハッシュタグは ==id== 時間 の形式

エラーメッセージとバックトレースを囲むように出力している

再定義可能なメソッド

  • rescue_from_standard_error_id
  • rescue_from_standard_error_log
  • rescue_from_standard_error_render(e)
  • self.rescue_from_standard_error?

rescue_from_standard_error

  1. 発生した例外のメッセージとバックトレースを logger.fatal でログに書き出す
  2. ハッシュコードを生成して logger.fatal でログに書き出す
  3. log/error.log にハッシュコードを出力する
  4. rescue_from_standard_error_render メソッドをコールする

rescue_from_standard_error_id

エラーログに出力するハッシュコードを生成する

デフォルトは "==#{SecureRandom.hex(20)}== #{Time.now}"

rescue_from_standard_error_log

エラーログの絶対パスを返す

デフォルトは Rails.root.join("log/error.log")

rescue_from_standard_error_render(e)

rescue_from_standard_error メソッドの最後に呼び出され、適切なテンプレートの描画を行う

デフォルトは raise e(発生した例外の再掲)

self.rescue_from_standard_error?

include Ans::HandleStandardError の前に、以下のように再定義する

class Posts < ActionController::Base
  module ::Ans::HandleStandardError
    def self.rescue_from_standard_error?
      true
    end
  end
  include Ans::HandleStandardError
end

デフォルトは Rails.env.production?

開発時に、一時的に有効にするときなどに再定義する

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

ans-handle_standard_error's People

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.