Я использую питонов, встроенных в класс регистрации. Я хотел бы выйти из системы только при возникновении ошибки, но когда это произойдет, чтобы выйти из системы до этой точки для целей отладки.
Было бы неплохо, если бы я мог сбросить и это, чтобы длительный процесс не содержал гигабайт логов.
В качестве примера. У меня есть процесс, который обрабатывает один миллион виджетов. Обработка виджета может быть сложной и включать несколько этапов. Если обработка не удалась, было бы полезно знать все журналы этого виджета до этого момента.
from random import randrange
logger = logging.getLogger()
for widget in widgetGenerator():
logger.reset()
widget.process(logger)
class Widget():
def process(self, logger):
logger.info('doing stuff')
logger.info('do more stuff')
if randrange(0, 10) == 5:
logger.error('something bad happened')
1 из 10 будет напечатано следующее:
делать вещи
делать больше вещей
случилось что-то плохое
Но нормальные журналы не будут напечатаны иначе.
Можно ли это сделать с помощью регистратора, как есть, или мне нужно свернуть мою собственную реализацию?
Используйте MemoryHandler
для буферизации записей, используя пороговое значение, например, ERROR
, и сделайте target
атрибут MemoryHandler
указателем на обработчик, который записывает, например, консоль или файл. Тогда вывод должен происходить только в том случае, если порог (например, ERROR
) достигнут во время выполнения программы.
logging.basicConfig(level=logging.ERROR)
.