プロジェクト

全般

プロフィール

QA #232

未完了

Redmine自体の操作ログ記録方法

奈良 裕記 さんが7年以上前に追加. ほぼ3年前に更新.

ステータス:
回答済
優先度:
通常
担当者:
-
カテゴリ:
-
対象バージョン:
開始日:
2016/10/31
期日:
2016/12/03 (7年以上 遅れ)
進捗率:

0%

予定工数:

説明

■要望

Redmine自体のアクセスログを取得したい。
実際に操作したID、操作内容を記録したい。

■解決策

application_controller中にafter_filterを定義して、
操作ログをテキストファイルに出力する方法。

https://groups.google.com/forum/#!topic/redmine-users-ja/T1b7j4UM1XA

app/controllers/application_controller.rb

after_filter :access_logging 
def access_logging
パスワードを削除してログ出力

RAILS3以降では、RAILS_ROOTが未定義エラーになります。
下記の様にRails.rootに変更してください。

log = Logger.new(File.join(Rails.root, "/log/access.log"), "daily")

■対応状況

ソース修正で対応

■補足

RAILS5では xxx_filter が非推奨になりました。
xxx_actionに変更した方が良さそうです。

語削除時の調査にも役立ちます。
チケット削除のログは、 destroy で検索すれば出てきます。
(チケット消えるとサーバ誤動作を疑われるので、adminの自己防衛としても必要)

RAILS5では、ActionController::Parameters がHashを継承しなくなったため、
一部プラグインでは下記エラー発生する模様(2020/2現在)
詳細→ #note-12

奈良 裕記 さんが7年以上前に更新

  • ステータス新規 から 回答済 に変更

おがわ あきぴー さんが7年以上前に更新

飯田さんのRedmine_logsプラグインで解決できるのでは?
管理画面からproduction.logが見れるので重宝してます。

Logsプラグイン http://www.r-labs.org/projects/r-labs/wiki/Logs

奈良 裕記 さんが7年以上前に更新

production.logとは全然違いますね

日時,ログインID,controller,actionなどが一行に記録されるので、アクセス状況の分析に便利です。

奈良 裕記 さんが7年以上前に更新

  • 題名Redmine自体のアクセスログ取得方法 から Redmine自体の操作ログ記録方法 に変更

(基本的には)ユーザの操作に対して記録されているので、タイトルを操作ログに変更しました。

奈良 裕記 さんが7年以上前に更新

  • 期日2016/12/03 にセット

奈良 裕記 さんが6年以上前に更新

奈良 裕記 さんが6年以上前に更新

3.4-unofficialcooking implemented
https://github.com/y503unavailable/redmine/issues/6

コピペ追加用抜粋(2017/11時点)

app/controllers/application_controller.rb

after_action :access_logging 

def access_logging 
  params.delete(:password) 
  params.delete(:password_confirmation) 
  params.delete(:new_password) 
  params.delete(:new_password_confirmation) 
  req_param = params.map {|key,value| "#{key} => #{value}"}.join(",") 
  message = "#{User.current.login}: #{req_param}" 
  log = Logger.new(File.join(Rails.root, "/log/access.log"), "daily") 
  log.formatter = Logger::Formatter.new 
  log.info(message) 
  log.close 
end 

奈良 裕記 さんが5年以上前に更新

奈良 裕記 さんが4年以上前に更新

Redmine4(Rails5)の場合、mapが使用不可なので、下記に変更する必要があります。

map → to_unsafe_h.map

Redmine4 コピペ用
app/controllers/application_controller.rb

after_action :access_logging 

def access_logging
  params.delete(:password)
  params.delete(:password_confirmation)
  params.delete(:new_password)
  params.delete(:new_password_confirmation)
  req_param = params.to_unsafe_h.map {|key,value| "#{key} => #{value}"}.join(",")
  message = "#{User.current.login}: #{req_param}" 
  log = Logger.new(File.join(Rails.root, "/log/access.log"), "daily")
  log.formatter = Logger::Formatter.new
  log.info(message)
  log.close
end

ActionController::Parameters がHash継承しなくなった
to_h では、permitのチェックが入りエラーになるため、ここでは to_unsafe_h を利用した。

奈良 裕記 さんが4年以上前に更新

奈良 裕記 さんが4年以上前に更新

奈良 裕記 さんが約4年前に更新

RAILS5では、ActionController::Parameters がHashを継承しなくなったため、
一部プラグインでは下記エラー発生する模様(2020/2現在)

エラー発生プラグイン https://github.com/southbridgeio/redmine_knowledgebase
(Redmineコア/他のPluginでは正常に動作している)

Completed 500 Internal Server Error in 148ms (Views: 38.4ms | ActiveRecord: 25.3ms)

NoMethodError (undefined method `to_unsafe_h' for #<ActiveSupport::HashWithIndifferentAccess:0x00007fdbd6085ae8>):

app/controllers/application_controller.rb:76:in `access_logging'
req_param = params.to_unsafe_h.map {|key,value| "#{key} => #{value}"}.join(",")
上記関連個所をコメントアウトしたところ、プラグインの機能は動作した。

関連情報(詳細はリンク先参照)
https://ja.stackoverflow.com/questions/4795/rails%E3%81%AE-params-%E3%81%A8%E3%81%84%E3%81%86%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%8C%E3%82%88%E3%81%8F%E5%88%86%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84

Rails 4 では、 ActionController::Parameters の親クラスの親クラスがHashです。
つまり、ハッシュと継承関係にあるのでハッシュと同じように振る舞います。

ハッシュを継承しているので、 "ActionController::Parameters is a Hash"と言えます。
つまりハッシュと完全な互換性があります。(後述するキーの扱いを除いて)

なお、Rails5では、使い方によっては安全のためのフラグがクリアされてしまうなど、
パラメータへのアクセス以外のメソッド(Enumerable由来のものなど)が使えてしまうことの弊害があることから、
ActionController::parameters は HashWithIndifferentAccess のサブクラスではなくなっています。

https://qiita.com/zenpou/items/950432bae246063786e8#paramsuser%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%81%AFhash%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E7%B6%99%E6%89%BF%E3%81%97%E3%81%A6%E3%81%AA%E3%81%84
params[:user]の中身はhashクラスを継承してない。

Action Controller Parameters
https://api.rubyonrails.org/v5.2.4/classes/ActionController/Parameters.html

奈良 裕記 さんが約4年前に更新

奈良 裕記 さんがほぼ3年前に更新

他の形式にエクスポート: Atom PDF