Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Rails 4和结构化日志记录,如何将请求id字段添加到日志中?_Ruby On Rails_Ruby_Logging_Logstash - Fatal编程技术网

Ruby on rails 使用Rails 4和结构化日志记录,如何将请求id字段添加到日志中?

Ruby on rails 使用Rails 4和结构化日志记录,如何将请求id字段添加到日志中?,ruby-on-rails,ruby,logging,logstash,Ruby On Rails,Ruby,Logging,Logstash,我正在向Rails 4应用程序添加结构化日志记录。使用和如中所述,我的工作基本正常 将请求id添加到日志时遇到问题。我找到的最接近的方法是将其添加到config/${ENV}.rb: config.log_tags = [:uuid] 但这会将请求id添加到标记列表中,而不是将其作为命名字段添加 { "tags": [ "da76b4be-01ae-4cc4-8d3c-87062ea02cfe" ], "host": "services", "severity": "D

我正在向Rails 4应用程序添加结构化日志记录。使用和如中所述,我的工作基本正常

将请求id添加到日志时遇到问题。我找到的最接近的方法是将其添加到
config/${ENV}.rb

config.log_tags = [:uuid]
但这会将请求id添加到标记列表中,而不是将其作为命名字段添加

{
  "tags": [
    "da76b4be-01ae-4cc4-8d3c-87062ea02cfe"
  ],
  "host": "services",
  "severity": "DEBUG",
  "@version": "1",
  "@timestamp": "2016-09-13T17:24:34.883+00:00",
  "message": "..."
}
这是有问题的。它使得如何搜索特定的请求id变得更加笨拙和不明显。此外,在logstash中解析消息会覆盖已经与日志消息关联的任何其他标记

是否有任何方法可以将请求id作为命名字段添加到日志中

{
  "request_id", "da76b4be-01ae-4cc4-8d3c-87062ea02cfe",
  "host": "services",
  "severity": "DEBUG",
  "@version": "1",
  "@timestamp": "2016-09-13T17:24:34.883+00:00",
  "message": "..."
}

有几种方法可以做到这一点。在Lograge中,您可以使用
自定义\u选项

  # all your lograge stuff...
  config.lograge.enabled = true

  config.lograge.custom_options = lambda do |event|
    # use the `event.payload`
    {uuid: event.payload[:uuid]}
  end
您可以在这里重载任何选项-它们将接管lib的选项


负责此操作的代码是。测试表明它是有效的。

这是一个老问题,但也许它会帮助像我这样努力找到一个简单方法来实现这一点的人

使用
custom\u有效载荷
(而不是
custom\u选项
),您可以直接访问控制器接收到的请求,并获取其id以将其添加到日志中:

config.lograge.custom|u有效负载do |控制器|
{
请求\u id:controller.request.request\u id
}
结束

无需配置
log\u标签
,此功能即可运行。

我尝试了此操作,但
有效负载
哈希没有uuid字段。我在日志中只得到了
“uuid”:null
。我发现您需要
将信息附加到
应用程序控制器中定义的有效负载中
,才能工作(请参阅)。但这只会将自定义字段添加到访问日志中。要使UUID有用,它需要位于与该请求相关联的所有日志中(与Rails在每个日志条目上放置标记的方式相同)。