[英]How to set an extra to level field with python logstash logger,?
我目前正在使用 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
但是對於我的生活,我無法弄清楚如何實際添加客戶配置。
我需要一些代碼示例來使用自定義配置或知道任何其他方式來設置消息中的頂級字段。
我剛剛通過將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 對象的“正確”解決方案,我將保持開放狀態。
來自鏈接的文檔: 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'})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.