【问题标题】:How do I log create actions?如何记录创建操作?
【发布时间】:2011-09-20 22:41:30
【问题描述】:

我正在尝试在我的 RoR 应用程序上创建一个日志记录功能,用于记录用户在模型中给定控制器上执行的所有操作。我尝试使用过滤器来实现它,但它们并没有解决我的问题,因为它们不允许我正确记录“创建”操作。

“创建”操作很棘手,因为当调用之前/之后过滤器时,该操作尚未保存,因此,我没有模型的相应 id(我需要)。

我知道我可以使用“after_commit”,但这会大大增加日志记录功能的复杂性,因为保存在每个日志条目中的“参数”会暴露给控制器,而不是模型。

有没有办法将“after_commit”过滤器动态添加到 ActiveRecord 的实例中?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    阅读本文,我认为这是一个不错的解决方案:Notifications

    【讨论】:

      【解决方案2】:

      这是我记录的方式,我有一个用户控制器创建这样的操作:

      def create
          @user = User.new(params[:user])
          if @user.save
              flash[:notice] = "Welcome, #{@user.username}"
              redirect_to(:controller => "users", :action => "home")
              session[:id] = @user.id
          else
              render("home")
          end
      end
      

      现在我想记录一个用户已创建,然后我这样做:
      首先在 User.rb(model) 中创建一个 AuditLogger 类:

      class User < ActiveRecord::Base
          ...some stuff other....
          class AuditLogger < Logger
             def format_message(severity, timestamp, progname, msg)
             "#{timestamp.to_formatted_s(:db)} #{severity} #{msg}\n"
          end 
      end
      

      然后回到控制器(users.rb)

      def create
          @user = User.new(params[:user])
          if @user.save
              logfile = File.open("#{Rails.root}/log/my_log.log", 'a')    
              audit_log = AuditLogger.new(logfile)
              audit_log.info "#{@user.firstname} was created successfully"
              redirect_to(:controller => "users", :action => "home")
          else
              render("home")
          end
      end
      

      您还需要在您的日志目录中创建一个名为 my_log.log 的文件。希望它应该能够登录。我知道这不是最好的解决方案,而且我有更好的方法,但当时我需要一些紧急工作,所以我坚持了下来。

      查看这些链接:
      rails logging tips
      alternative logging solution

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多