LoginSignup
37
40

More than 3 years have passed since last update.

Railsのログ出力と設定

Posted at

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

開発時にターミナルで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')
37
40
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
37
40