はじめに
Rails 6 に追加されそうな新機能を試す第39段。 今回は、 LoggerSilence
編です。
Rails 6 では、 LoggerSilence
を include
すると 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 を作る
LoggerSilence
を include
するだけなら、 CRUD は必要ないのですが、今回はあえて作ることにしました。
$ bin/rails g scaffold User name
db:migrate を実行する
db:create db:migrate
を実行します。
$ bin/rails db:create db:migrate
ApplicationController を修正する
ApplicationController を修正して、 MyLogger
クラスを作って、 LoggerSilence
を include
します。
MyLogger を使って
- controller の情報を DEBUG として出力する。
- action の情報 INFO として出力する。
- controller と action の両方を、 ERROR として出力する。
-
silence
メソッドで、 ERROR だけ出力する。
ようにしてみます。
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::LoggerSilence
を include
して試すと DEPRECATION WARNING
は出ません。
試したソース
試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try039_logger_silence