Ruby on rails 使用Rails 4和结构化日志记录,如何将请求id字段添加到日志中?
我正在向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
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在每个日志条目上放置标记的方式相同)。