デフォルトのアプリケーションログが出力される場所
Railsではターミナルでアプリケーションログが出力されていますがデフォルトで下記の場所にも出力されています。
1 |
log/development.log |
これはdevelopment環境で動作している場合に出力されます。もしtest環境で動かしていればtest.logに出力されますし、production環境で動作させていればproduction.logに出力されることになります。
アプリ内にログ出力の設定をする
デフォルトのアプリケーションログもそうですがアプリ内のコントローラやモデル等にログ出力設定をloggerオブジェクトを使えばすることができます。下記のように記述します。
1 |
logger.ログレベル "ログメッセージ" |
ログレベル
デフォルトのログレベル(どこまでのレベルをログに出力するか)はdebugになっているので全てのログがファイルに出力されることになります。
ログレベル(数字) | ログレベル | 意味 |
---|---|---|
5 | unknown | 原因不明のエラー |
4 | fatal | エラーハンドリングができない致命的エラー |
3 | error | エラーハンドリングされたエラー |
2 | warn | 警告 |
1 | info | 通知 |
0 | debug | 開発用のデバッグ情報 |
ログレベルの設定場所
開発環境の場合は下記の場所の「config.log_level」という設定項目にて設定をします。
1 |
config/environments/development.rb |
例えば、上記ファイルに下記のように記述すればdevelopmentログにはログレベルがwarn以上の物のみしか出力されなくなります。
1 |
config.log_level = :warn |
ログローテーションの設定
config/environments/development.rbに対して下記のように追記で設定します。下記設定は日次(daily)でログローテーションさせるための設定になります。
1 |
config.logger = Logger.new('log/development.log','daily') |
その他
他にもオリジナルのロガーを作成したり、日次や週次でロガーを分ける設定だったり、ログフォーマットを整形する設定だったり色々な設定があるので色々調べてみてください。
設計指針
ログの取得対象
- HTTP電文内容やレスポンスコード(Railsのデフォルトのログで可能)
- その他アプリの操作ログ(独自に実装する。ログテーブルで実装するのが一般的)
ログテーブルへ出力する
ログ用のテーブル(UserEvent等)を作りそこにレコードを作って出力するようにします。
用途
- ログイン、ログアウトのアプリの操作履歴を記録したい場合等
カラム例
ユーザーid
ログインログアウト履歴を管理するならユーザーテーブルと紐付けたりすると良いでしょう。
イベントタイプ
任意の名前をつけると良いでしょう。
- rejected(アカウント停止等でログイン拒否)
- logged_in(ログイン)
- logged_out(ログアウト)
発生時刻
datetime型にします。既存のcreated_atでも問題ないでしょう。
Railsのデフォルトのログをそのまま使う
Railsでは特に設定しなくても何もしなくても下記のようにHTTP電文内容がコンソール及び、ファイルに出力されます。正常の場合はログレベルがINFOで、エラーが発生した場合はログレベルがERRORになるようです。
懸念点
電文の内容を全て出力してしまうと住所や電話番号等の個人情報までログに出力されてしまうことになります。
ログの出力先
デフォルトではディスク上に出力されてしまうとは思いますが、最近はAWSのCloudWatchやS3を出力先にします。
この記事へのコメントはありません。