Help us understand the problem. What is going on with this article?

Railsのログ出力と設定

アプリケーションログの出力先

開発時にターミナルでRailsサーバを起動していると、ターミナルにアプリケーションログが出力されます。このアプリケーションはlog/development.rbにも出力されています。これはdevelopment環境でサーバを動かしているからです。production環境で動かしていればlog/production.logに、test環境で動かしていればlog/test.logに出力されます。

自分でログを出力する

Railsが自動的に出力するログ以外にも、自分でコントローラやモデルなどからログを出力することができます。ログ出力は、Railsが用意指定るloggerオブジェクトを通じて行います。

例えば、デバックようにタスク作成時に、保存したタスクの情報をログ出力させたい場合、以下のようにします。

tasks_controller.rb
def create
  if @task.save
    logger.debug "task: #{@task.attributes.inspect}"
  end
end

これで、loggerオブジェクトのdebugメソッドを呼び、ログにタスクの情報をdebugレベルで出力するという指定をしています。
ターミナルとlog/development.logにtask: ~のログが出力されています。

ログレベル

ログレベル(数字) ログレベル 意味
5 unknown 原因不明のエラー
4 fatal エラーハンドリング不可能な致命的エラー
3 error エラーハンドリング不可能なエラー
2 warn 警告
1 info 通知
0 debug 開発者向けデバッグ用詳細情報

各メソッド呼び出し例

logger.unknown '不明なエラー'
logger.fatal '致命的なエラー'
logger.error 'エラー'
logger.warn '警告'
logger.info 'お知らせ'
logger.debug 'デバック

ログレベルの設定

ログレベルの設定は、(development環境の場合)config/environments/development.rbにconfig.log_level = :warn(設定したログレベルをシンボルで)を追記します。
こうするとwarn以上のログのみを出力することができます。config/environments配下の各環境に合わせて設定しましょう。

アプリケーションログの特定のパラメータ値をマスクする

アプリケーションログには、コントローラで渡ってきたパラメータなども出力されます。パラメータにパスワードやカード番号など、セキュアな情報が含まれる場合、意図せずに出力されてしまう可能性があります。ログに出力したくないパラメータをconfig/initializers/filter_parameter_logging.rbのRails.application.config.filter_parametersに設定すると、特定のパラメータの値を隠してログ出力することができます。この設定にはデフォルトでpasswordが設定されています。

config/initializers/filter_parameter_logging.rb
Rails.application.config.filter_parameters += [:password]

ここで指定されたパラメータの値は、ログ上では[FILTERD]と出力されるようになります。

アプリケーション内共通で使いたいログの設定

ロガーの設定は、config/developments配下の環境ごとに設定します。development環境のログを設定するには、config/environments/development.rbに以下のように追記します。

config/environments/development.rb
  config.logger = Logger.new('log/development.log', 'daily')

これで、log/development.rbに、1日ごとにログを取ることができます(過去のログは、log/development.log.yyyymmddというファイル名になります)dailyをweeklyにすると週ごと、monthlyにすると月ごとにログローテーションすることができます。用途に合わせてログファイルを分けたい場合など、さらにロガーの設定を追記します。

config/environments/development.rb
  config.logger = Logger.new('log/development.log', 'daily')
  config.custom_logger = Logger.new('log/custom.log', 'weekly')
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした