LoginSignup
3
5

More than 3 years have passed since last update.

Rails6 のちょい足しな新機能を試す39(LoggerSilence 編)

Posted at

はじめに

Rails 6 に追加されそうな新機能を試す第39段。 今回は、 LoggerSilence 編です。
Rails 6 では、 LoggerSilenceinclude すると DEPRECATION WARNING のメッセージが出力されます。
代わりに、 ActiveSupport::LoggerSilence が用意されました。

Ruby 2.6.3, Rails 6.0.0.rc1 で確認しました。Rails 6.0.0.rc1 は gem install rails --prerelease でインストールできます。

$ rails --version
Rails 6.0.0.rc1

User の CRUD を作る

LoggerSilenceinclude するだけなら、 CRUD は必要ないのですが、今回はあえて作ることにしました。

$ bin/rails g scaffold User name

db:migrate を実行する

db:create db:migrate を実行します。

$ bin/rails db:create db:migrate

ApplicationController を修正する

ApplicationController を修正して、 MyLogger クラスを作って、 LoggerSilenceinclude します。

MyLogger を使って

  • controller の情報を DEBUG として出力する。
  • action の情報 INFO として出力する。
  • controller と action の両方を、 ERROR として出力する。
  • silence メソッドで、 ERROR だけ出力する。

ようにしてみます。

app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  class MyLogger < Logger
    include LoggerSilence
    include ActiveSupport::LoggerThreadSafeLevel
  end

  before_action :mylogger_test

  private

  def mylogger_test
    mylogger = MyLogger.new(STDOUT)
    mylogger.silence do
      mylogger.debug("controller = #{controller_name}")
      mylogger.info("action = #{action_name}")
      mylogger.error("controler#action = #{controller_name}##{action_name}")
    end
  end
end

実行してログを確認する

bin/rails server を実行して、ブラウザから、 http://localhost:3000/users にアクセスしてみます。

DEPRECATION WARNING が出ますが、 silence メソッドは機能しています。

DEPRECATION WARNING: Including LoggerSilence is deprecated and will be removed in Rails 6.1. Please use `ActiveSupport::LoggerSilence` instead (called from include at /app/app/controllers/application_controller.rb:3)
Started GET "/users" for 172.18.0.1 at 2019-06-16 04:14:33 +0000
   (0.4ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
Processing by UsersController#index as HTML
E, [2019-06-16T04:14:33.457200 #1349] ERROR -- : controler#action = users#index
...

ActiveSupport::LoggerSilence を include する

ActiveSupport::LoggerSilenceinclude して試すと DEPRECATION WARNING は出ません。

試したソース

試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try039_logger_silence

参考情報

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5