我目前正在使用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
但是对于我一生来说,我不知道如何实际添加客户配置。
我需要一些使用自定义配置的代码示例,或者需要其他任何方法来设置消息中的顶级字段。
答案 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'})