Регистратор не выводит сообщения INFO после указания имени файла в basicConfig - PullRequest
0 голосов
/ 06 августа 2020

Я использую объект регистрации для отображения процесса моего Python скрипта. Все работало нормально, пока я не указал файл журнала.

Рабочий код

from datetime import timedelta
import logging
import time

def main():
    start_time = time.monotonic()

    config = get_args()

    # Logger configuration.
    msg_format = '[%(asctime)s - %(levelname)s - %(filename)s: %(lineno)d (%(funcName)s)] %(message)s'
    logging.basicConfig(format=msg_format, level=logging.INFO)
    logger = logging.getLogger()

    logger.info(msg='Starting process...')

    # End of process.
    end_time = time.monotonic()
    process_time = str(timedelta(seconds=(end_time - start_time))).split('.')[0] # Get rid of trailing microseconds.
    logger.info(msg=('End. Entire process took approximately %s' % process_time))


if __name__ == '__main__':
    main()

Не рабочий код

from datetime import datetime, timedelta
import logging
import os
import time


def main():
    start_time = time.monotonic()

    config = get_args()

    # Logger configuration.
    timestamp = datetime.now().strftime(format='%Y%m%d-%H%M')
    log_filename = '_'.join(['log', timestamp])
    log_file_path = os.path.join(config.log_dir, log_filename)
    msg_format = '[%(asctime)s - %(levelname)s - %(filename)s: %(lineno)d (%(funcName)s)] %(message)s'
    logging.basicConfig(filename=log_file_path, format=msg_format, level=logging.INFO)
    logger = logging.getLogger()

    logger.info(msg='Starting process...')

    # End of process.
    end_time = time.monotonic()
    process_time = str(timedelta(seconds=(end_time - start_time))).split('.')[0] # Get rid of trailing microseconds.
    logger.info(msg=('End. Entire process took approximately %s' % process_time))


if __name__ == '__main__':
    main()

Кто-нибудь знает, в чем может быть проблема? Я подозреваю, что указание имени файла журнала в logging.basicConfig могло испортить обработчики или что-то в этом роде, но я не уверен на 100%. Спасибо!

1 Ответ

0 голосов
/ 06 августа 2020

Ответ был относительно очевиден после более внимательного чтения документации. Я не знал, что не включил никаких обработчиков в свою конфигурацию. Чтобы решить эту проблему, все, что мне нужно было сделать, это изменить:

logging.basicConfig(filename=log_file_path, format=msg_format, level=logging.INFO)

на это:

logging.basicConfig(format=msg_format, level=logging.INFO, \
                    handlers=[logging.FileHandler(filename=log_file_path), logging.StreamHandler()])

Надеюсь, это поможет любому, кто столкнется с той же ошибкой.

Этот ответ мне помог: конфигурация регистратора для входа в файл и вывода на печать

...