特に必要だったわけじゃなんだけど、本を読んでて気になったloggerを少し触ってみたのでメモ。
loggerとは
rails sでサーバーを起動すると、ローカルでリクエストが走った時やSQLが走った時などターミナルにダダダっとログが出力されるけど、あれもRailsのloggerとしてきちんと保存されているんだって。
どこに保存されているのか
app/log/development.logに保存されてる。
username: sample_app hakopro $ cd log username: log hakopro $ ls development.log development.log.20190919 development.log.20190920 development.log.20190921 development.log.20190922 development.log.20190923 development.log.20190924 ・ ・ ・
わーお。めっちゃ出てきた!
日毎のログが一つのファイルに格納されてる状態。日付がないものが当日分(つまりリアルタイム分)ですね
あんまりないかもしれないけど、過去のログを再現したい時とかはここを参照すれば確認できなくもなさそう。
ちなみに、私は使ったことがないんだけどdelayed_job.logとかcron.jobとかもここにたくさんありました。
自作したログを出力する
当然、自分で作ったログを出力することもできるのでやってみる
準備
logger.debug "文字列"
という形でログを新しく作ることができる。(debugの部分はログレベルを指定)
users_controller.rb
def create @user= User.new(user_params) logger.debug "hogehoge--------------------" if @user.save redirect_to root_path, notice: "ユーザーを作成しました" else render :new end end
ログはリクエストが走った時に出力するのがふつうなので、コントローラーに書きます。
例が微妙だけど、とりあえず適当にユーザーを作成した時に「hogehoge--------------------」という目立ちやすいログを入れてみます。
ユーザーを作成
ブラウザからユーザーを作成し、ターミナルに出力されたログを確認してみたところ
Processing by UsersController#create as HTML Parameters: {"utf8"=>"✓", "user"=>....省略.... "commit"=>"登録"} hogehoge------------ (0.2ms) BEGIN ・ ・ SQL (3.9ms) INSERT INTO `users`.....
お!確かに「hogehoge------------」がちゃんと出力されている。
(業務のプロダクトを使ってる関係で細かいところは色々と省略)
createアクションでsaveされる前にloggerで吐き出すようコントローラーで書いたので、パラメーターが渡ってきてSQLのINSERTが走る前のところでログが挟まれているのが確認できます。
loggerファイルも見てみる
ターミナルで確認できたということは、loggerファイルにも書き込まれているはずなので念のため確認してみる。
username: sample_app hakopro $ cd log username: log hakopro $ less development.log | grep "hogehoge--------------------" hogehoge--------------------
お。ちゃんと保存されてました。
ちなみに
loggerファイルはデフォルトでは日別で一つのファイルが生成されるようになっているけど、設定を変更することもできる
config/environment/development.rb
config.logger = ActiveSupport::Logger.new("log/development.log", 'daily')
ここのdailyをweeklyにしたりすればOK。
まとめ
- Railsのサーバーログはapp/log/development.logに格納されている
- ログを意図的に吐き出したい場合は「logger.debug "文字列"」
特に今後の仕事で直接的に活かせそうではないけどw、知っているのと知らないのとでは仕事の進め方も違ってくる気がするので、実際に触って見てとても勉強になりました。