[英]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.