Python регистрация нескольких модулей каждый модуль журнала в отдельных файлах - PullRequest
0 голосов
/ 07 марта 2020

У меня есть основной скрипт и несколько модулей. Прямо сейчас у меня есть настройки регистрации, где все записи из всех модулей go в один файл журнала. Трудно отлаживать, когда все в одном файле. Поэтому я хотел бы разделить каждый модуль в отдельный лог-файл. Я также хотел бы видеть модуль запросов, который каждый модуль использует в журнале модуля, который его использовал. Я не знаю, возможно ли это вообще. Я искал везде и пробовал все, что мог придумать, чтобы сделать это, но всегда возвращалось к записи всего в один файл или регистрации настроек в каждом модуле, и из моего основного модуля запускал сценарий вместо импорта как модуль.

main.py

import logging, logging.handlers
import other_script.py

console_debug = True
log = logging.getLogger()

def setup_logging():    
    filelog = logging.handlers.TimedRotatingFileHandler(path+'logs/api/api.log',
                when='midnight', interval=1, backupCount=3)
    filelog.setLevel(logging.DEBUG)
    fileformatter = logging.Formatter('%(asctime)s %(name)-15s %(levelname)-8s %(message)s')
    filelog.setFormatter(fileformatter)
    log.addHandler(filelog)

    if console_debug:
        console = logging.StreamHandler()
        console.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(name)-15s: %(levelname)-8s %(message)s')
        console.setFormatter(formatter)
        log.addHandler(console)

if __name__ == '__main__':
    setup_logging()

other_script.py

import requests
import logging

log = logging.getLogger(__name__)

1 Ответ

0 голосов
/ 07 марта 2020

Одна очень базовая c концепция ведения журнала python заключается в том, что каждый файл, поток или другое место, в котором регистрируется go, эквивалентно одному обработчику. Таким образом, если вы хотите, чтобы каждый модуль записывал в свой файл отдельный файл, вы должны предоставить каждому модулю свой собственный обработчик. Это также можно сделать из центрального места. В вашем main.py вы можете добавить это, чтобы сделать журнал модуля other_script отдельным файлом:

other_logger = logging.getLogger('other_script')
other_logger.addHandler(logging.FileHandler('other_file'))
other_logger.propagate = False

Последняя строка требуется, только если вы добавляете обработчик в регистратор root. Если вы продолжите размножение со значением True по умолчанию, все журналы будут отправлены также обработчикам root. В вашем сценарии может быть лучше вообще не использовать регистратор root, а использовать указанный c именованный регистратор, например getLogger('__main__') в main.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...