【发布时间】:2026-01-04 15:45:02
【问题描述】:
我的想法是制作一个上下文日志记录方案,如下例所示:
[ DEBUG] Parsing dialogs files
[ DEBUG] ... [DialogGroup_001]
[ DEBUG] ...... Indexing dialog xml file [c:\001_dlg.xml]
[ DEBUG] ......... dialog [LobbyA]
[ DEBUG] ............ speech nodes [3]
[ DEBUG] ............... [LobbyA_01]
[ DEBUG] ............... [LobbyA_02]
[ DEBUG] ............... [LobbyA_03]
[ DEBUG] ............ sms nodes [0]
[ DEBUG] ......... dialog [LobbyB]
[ DEBUG] ............ speech nodes [3]
[ DEBUG] ............... [LobbyB_01]
[ DEBUG] ............... [LobbyB_02]
[ DEBUG] ............... [LobbyB_03]
[ DEBUG] ............ sms nodes [0]
[ DEBUG] ... [DialogGroup_002]
[ DEBUG] ...... Indexing dialog xml file [c:\002_dlg.xml]
[ DEBUG] ......... dialog [HighGroundsA]
[ DEBUG] ............ speech nodes [3]
[ DEBUG] ............... [HighGroundsA_01]
[ DEBUG] ............... [HighGroundsA_02]
[ DEBUG] ............... [HighGroundsA_03]
[ DEBUG] ............ sms nodes [0]
此时,我正在使用 Python 的日志记录模块,在记录时带有自定义的手写前缀,例如:
(...)
log.debug('')
log.debug('Parsing dialogs files')
for dlg in defDlgList:
log.debug('... [{0}]'.format(dlg))
(...)
它工作得很好,但有一些微妙的问题,例如:从内部函数记录时 - 它们可能会从不同的范围调用,并且每次调用的前缀长度可能会有所不同。
我正在寻找一种优雅且不可见的方式来自动为每个日志建立一个“...”前缀的长度。我宁愿避免将前缀长度作为参数传递给每个函数或使用显式调用设置长度,例如:
(...)
logWrapper.debug('')
logWrapper.debug('Parsing dialogs files')
for dlg in defDlgList:
logWrapper.nextLogLevelBegin()
logWrapper.debug('[{0}]'.format(dlg))
logWrapper.nextLogLevelEnd()
(...)
有没有办法从 Python 的解析器中获取当前缩进级别或构造一个范围敏感的包装类来进行日志记录?
【问题讨论】:
标签: python logging formatting