要件
次のような特定のイベントの監査ログを保持したいと考えています。
- ユーザーが正常にログインしました
- ユーザーがログインできませんでした (理由: パスワードが間違っている、未確認など)。
- SuperUser が別のユーザーの詳細を変更しました (変更内容とともに)
- 等
このログには、次のような詳細が含まれている必要があります。
- アクションを実行しているログイン ユーザー (コントローラの に基づく
current_user
) - 変更中のレコード (スーパー ユーザーの場合の他のユーザー レコードなど)
- そのアクションのリクエストの IP アドレス
このログは、後でマシン上の別のサービスによって取得できるように、データベース テーブルではなく、ファイル システム上のファイルにも保存する必要があります。
いくつかの可能性
これまでに検討したアプローチの短いリストを次に示します。
ActiveRecord::オブザーバー
オブザーバーは、これらの特定のイベントを監視する優れた方法を提供します。
その後、オブザーバーをログ ファイルに追加できますが、そのような呼び出しの結果 (ログインの失敗や機能など) を簡単に取得できるかどうかはわかりません。何らかの方法でコントローラーを呼び出す必要があります。current_user
ログインしているユーザーを特定し、IP アドレスを取得するための HTTP リクエストを取得するメソッド。
監査ジェム (audited、auditable、paper_trail など)
これらの gem は、現在のユーザーと IP アドレスでコントローラーにアクセスする方法を知っているという便利さを備えていますが、データベース内の監査テーブルにすべてログを記録します。Auditable
ARコールバックだけでなく、オブジェクトのメソッド呼び出しを監査できるため、特に優れていますが、データベースではなくファイルに書き込むようにパッチを当てる必要があるかもしれません..または何か?
ActiveSupport::通知
これについてはまだ詳しく調べる必要がありますが、レール内の低レベルのイベントをサブスクライブする低レベルの方法を提供していると思います。これはこの状況には低すぎるかもしれませんが、さらに調査する必要があります。
Log4r
これは良いログ ファイルになるようですが、イベントを監視する方法はないと思います。これは問題の一部にすぎません。
何かアドバイス?
これを行うベストプラクティスの方法はありますか? 以前の経験から学んだ宝石や教訓をお勧めできますか? 他に考慮すべきことはありますか?