我試圖在日誌中使用str.format
樣式模板。似乎無法讓它正常工作。使用`str.format`模板日誌消息
>>> import logging
>>> logging.basicConfig(filename='/tmp/example', format='{asctime} - {levelname} - {message}', style='{', level=logging.INFO)
>>> logger = logging.getLogger(__name__)
>>> logger.warning('blah')
>>> logger.warning('{foo:03d}', {'foo': 42})
實際輸出:
2017-02-23 16:11:45,695 - WARNING - blah
2017-02-23 16:12:11,432 - WARNING - {foo:03d}
預期輸出:
2017-02-23 16:11:45,695 - WARNING - blah
2017-02-23 16:12:11,432 - WARNING - 042
什麼我在此設置丟失?
我不想看到在記錄字符串之前對字符串進行格式化的變通辦法,或者使用舊式%模板的Python 2 solutions。
如果我們在調用記錄器之前格式化字符串,然後日誌聚合的東西不能正常工作 – wim
你能更具體嗎?它如何不正常工作? – amoose136
考慮諸如'logger.warning('thing%(thing_id)03d',{'thing_id':42})''的問題'的消息。這會在輸出中產生一個日誌消息,例如'042的問題'。然而,像'sentry'這樣的日誌聚合服務會將'001'事件,'042事件','069事件'作爲同一警告的不同表現集中在一起。如果您自己爲日誌記錄創建模板,而不是讓日誌記錄器處理日誌記錄,那麼您將失去所有功能,並且可以獲得數百萬個不同的警報(應該只有1次警報,並有數百萬次命中)。 – wim