繁体   English   中英

如何将Rails动作或控制器名称插入到Ruby Gem中以在日志文件中使用?

[英]How can I pull in the Rails action or controller names into my Ruby Gem for use in a log file?

这里的第一个问题,所以请轻松一点。 我正在编写供我的rails应用程序使用的gem。 gem会简单地将控制器中操作通过参数传递的信息打印到日志文件中。 我一直在努力,直到我希望报告文件也打印信息来源的操作名称为止。 因此,示例输出为:

记录的详细信息:日期和时间来自操作的报告:(类似于Controller +操作名称)Profile.update,然后是params信息。 我正在使用以下代码来获取params信息。

我已注释掉我认为可以为我带来数据的部分。 得到一个错误。 任何建议将不胜感激。 谢谢。

# initializes file and writes-only at end of file if exists or creates new one
def self.open(filename)
    @filename = File.open(filename,'a+')
end


# method to take in any amount of parameters and write to file
def self.usageLog (*items)
    ReportLogger.open("UsageLogging.txt")
    # string actionName = controllerContext.RouteData.values["action"].ToString()
    @filename.print("Logged Details: " + Time.now.strftime("%d/%m/%Y %H:%M:%S") + "\n")
    # @filename.print("Report Action: :" + actionName)
        items.each do |item|
            @filename.print(item)
        end

        @filename.puts( " -EndLog" + "\n" + " - - - - - - - - - - - - - - ")
    end 

已修改-我已经玩过这个,但似乎无法正常工作。 我已将控制器更改为调用ReportLogger.usageLog(profile_params),所以这应该提取所有参数? 我已经修改了Gem代码,如下所示,但它似乎不想将控制器详细信息拖入日志。

# method to take in any amount of parameters and write to file
def self.usageLog(params)
    ReportLogger.open("UsageLogging.txt")
    # string actionName = controllerContext.RouteData.values["action"].ToString()
    #controller_name = params["controller"]
    #action_name = params["action"]
    #other_params = params.reject do |k,v| 
    #   %w(action controller).include? k
    #end

    @filename.print("Logged Details: " + Time.now.strftime("%d/%m/%Y %H:%M:%S") + "\n")
    #@filename.puts(controller_name)

    #@filename.print("Report Action: :" + controller_name)

    controller_name = params[:controller]
    @filename.puts(controller_name)

    params.each do |param|
        @filename.print(param.to_s + "\n")
    end

        @filename.puts( " -EndLog" + "\n" + " - - - - - - - - - - - - - - ")
    end

报告日志如下所示:

记录的详细信息:2015年2月12日13:11:11

[“ name”,“ Bradley”] [“ phone_number”,“ 087 6312683”] [“ image”,#,@ original_filename =“ IMG_0001.jpg”,@ content_type =“ image / jpeg”,@ headers =“ Content-处置:表单数据;名称= \\“个人资料[图像] \\”;文件名= \\“ IMG_0001.jpg \\” \\ r \\ n内容类型:图像/ jpeg \\ r \\ n“>] [” bio“,”新建哎呀,该死!”] -EndLog


参数始终包含Controller名称和Action名称:

def index
  puts params
end
> {"controller"=>"home", "action"=>"index"}

因此,如果使usageLogLog方法接受整个params哈希,则可以访问它们,例如:

def self.usageLog(params)

  controller_name = params["controller"]
  action_name = params["action"]
  other_params = params.reject{|k,v| %w(action controller).include? k }

end

然后,只要您想从控制器登录,就可以执行以下操作:

ReportLogger.usageLog(params)

或者,如果您想传递多个参数,则可以这样调用:

ReportLogger.usageLog(params[:controller], params[:action], model_params, "anything else")

其中,model_params是您要处理的模型的已清理白名单方法。

然后,您将定义如下方法:

def self.usageLog(controller_name, action_name, *items)
  ....
  items.each do |item|
    @filename.print(item.to_s + "\n")
  end

end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM