Как отключить буфер журналов для получения журналов в режиме реального времени с помощью инструмента командной строки python? - PullRequest
1 голос
/ 09 апреля 2019

У меня есть инструмент командной строки, который производит много журналов.Я хочу, чтобы эти журналы отправлялись на stdout, как только они были сделаны.Прямо сейчас программа завершает все (что может занять несколько минут), а затем отправляет все на stdout все сразу.Это означает, что в настоящее время пользователь не знает, что происходит внутри, и я хочу это изменить.

До сих пор я пытался передать флаг -u в качестве аргумента командной строки, но это неничего не меняюУ меня такое чувство, что мне нужно использовать logging.handlers.BufferingHandler с flush() в некотором качестве, но я не смог разобраться с этим через мастеринг.

def some_func(flag: bool):
    if flag:
        logging.info('flag is truthy')
        return
    logging.warning('flag is falsy')

Я бы хотел, чтобы вышеуказанная функцияпокажите пользователю один из этих журналов, как только он будет создан.Примечание: в настоящее время я устанавливаю уровень ведения журнала с помощью logging.root.setLevel(logging.INFO).

Спасибо!

1 Ответ

0 голосов
/ 09 апреля 2019

Использовать StreamHandler в модуле регистрации

import logging

# create logger
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)

# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# add formatter to ch
ch.setFormatter(formatter)

# add ch to logger
logger.addHandler(ch)

# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')

Это сбросит все журналы на консоли

$ python simple_logging_module.py
2005-03-19 15:10:26,618 - simple_example - DEBUG - debug message
2005-03-19 15:10:26,620 - simple_example - INFO - info message
2005-03-19 15:10:26,695 - simple_example - WARNING - warn message
2005-03-19 15:10:26,697 - simple_example - ERROR - error message
2005-03-19 15:10:26,773 - simple_example - CRITICAL - critical message
...