Моя идея состоит в том, чтобы создать схему ведения журнала контекста, как показано в примере ниже:
[ 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 или создать класс оболочки, чувствительный к области видимости, для ведения журнала?