如何使用python logstash记录器设置额外的级别字段?

时间:2018-11-07 01:59:17

标签: python python-3.x logstash

我目前正在使用python-logstash-async库,本质上它只是python-logstash的包装。

https://python-logstash-async.readthedocs.io

我试图阅读他们的文档,以便弄清楚如何为我发送的邮件设置其他顶级字段。

目前,我只能将其他字段添加到记录器提供的extra对象中。

但是extra字典意味着我所有的额外字段都不在顶层。

代替发送:

{
 "message":"blah"
 "extra": {
  "blax":"baz"
 }
}

我要发送:

{
 "message":"blah"
  "blax":"baz"
}

他们的文档很快提到了这种可能性:https://python-logstash-async.readthedocs.io/en/stable/config.html?highlight=tags

但是对于我一生来说,我不知道如何实际添加客户配置。

我需要一些使用自定义配置的代码示例,或者需要其他任何方法来设置消息中的顶级字段。

2 个答案:

答案 0 :(得分:1)

通过将extra字段添加到常量变量中,我发现了一个快速的技巧:

from logstash_async.constants import constants
constants.FORMATTER_LOGSTASH_MESSAGE_FIELD_LIST.append('my_new_top_field')
logger.info('blah',extra={'my_new_top_field':'bar'})

似乎导致了消息

{
  'message':'blah',
  'my_new_top_field':'bar'
  ... etc
}

正在发送。

哪个解决了我的问题。但是,如果有人想出使用config对象的“适当”解决方案,我将保持开放状态。

答案 1 :(得分:1)

从链接的文档中:extra_prefix: To disable grouping of the extra items and have them on the top level of the log event message, simply set this option to None or the empty string.

诀窍是将extra_prefix设置为None,然后将所有以extra传递到日志记录的字段添加到Logstash事件的顶级。

示例(未经测试):

handler = AsynchronousLogstashHandler(...)
formatter = LogstashFormatter(extra_prefix=None)
handler.setFormatter(formatter)
...
logger.info('blah',extra={'my_new_top_field':'bar'})