アプリケーションログの出力先
開発時にターミナルでRailsサーバを起動していると、ターミナルにアプリケーションログが出力されます。このアプリケーションはlog/development.rbにも出力されています。これはdevelopment環境でサーバを動かしているからです。production環境で動かしていればlog/production.logに、test環境で動かしていればlog/test.logに出力されます。
自分でログを出力する
Railsが自動的に出力するログ以外にも、自分でコントローラやモデルなどからログを出力することができます。ログ出力は、Railsが用意指定るloggerオブジェクトを通じて行います。
例えば、デバックようにタスク作成時に、保存したタスクの情報をログ出力させたい場合、以下のようにします。
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が設定されています。
Rails.application.config.filter_parameters += [:password]
ここで指定されたパラメータの値は、ログ上では[FILTERD]と出力されるようになります。
アプリケーション内共通で使いたいログの設定
ロガーの設定は、config/developments配下の環境ごとに設定します。development環境のログを設定するには、config/environments/development.rbに以下のように追記します。
config.logger = Logger.new('log/development.log', 'daily')
これで、log/development.rbに、1日ごとにログを取ることができます(過去のログは、log/development.log.yyyymmddというファイル名になります)dailyをweeklyにすると週ごと、monthlyにすると月ごとにログローテーションすることができます。用途に合わせてログファイルを分けたい場合など、さらにロガーの設定を追記します。
config.logger = Logger.new('log/development.log', 'daily')
config.custom_logger = Logger.new('log/custom.log', 'weekly')