我正在向Rails 4应用添加结构化日志记录。使用lograge中描述的logstash-logger和this article,我的工作大部分都在运作。
我在向日志添加请求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": "..."
}
答案 0 :(得分:1)
有几种方法可以做到这一点。从Lograge,您可以使用custom_options
:
# 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的选项。
答案 1 :(得分:0)
古老的问题,但也许会帮助像我这样努力寻找简单方法的人。
使用custom_payload
(而不是custom_options
),您可以直接访问控制器收到的请求,并获取其ID以将其添加到日志中:
config.lograge.custom_payload do |controller|
{
request_id: controller.request.request_id
}
end
无需为此配置log_tags
。