Вход в модуль - Python - PullRequest
       0

Вход в модуль - Python

0 голосов
/ 03 декабря 2018

В программе MAIN_SETUP.py я импортирую otherMod2

MAIN_SETUP.py

import logging
import otherMod2


# ----------------------------------------------------------------------
def main():
    """
    The main entry point of the application
    """
    logger = logging.getLogger("exampleApp")
    logger.setLevel(logging.INFO)

    # create the logging file handler
    fh = logging.FileHandler("new_snake.log")

    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)

    # add handler to logger object
    logger.addHandler(fh)

    logger.info("Program started")
    result = otherMod2.add(7, 8)
    logger.info("Done!")


if __name__ == "__main__":
    main()

otherMod2.py

import logging

module_logger = logging.getLogger("exampleApp.otherMod2")


# ----------------------------------------------------------------------
def add(x, y):
    """"""
    logger = logging.getLogger("exampleApp.otherMod2.add")
    logger.info("added %s and %s to get %s" % (x, y, x + y))
    return x + y

Если я запускаю программу (MAIN_SETUP.py), файл new_snake.log создан, следующие данные записываются в файл

2018-12-03 16:21:29,772 - exampleApp - INFO - Program started
2018-12-03 16:21:29,772 - exampleApp.otherMod2.add - INFO - added 7 and 8 to get 15
2018-12-03 16:21:29,772 - exampleApp - INFO - Done!

Вопрос 1:

В otherMod2.py у нас есть ниже logger, он просто определен ине используется .Можем ли мы удалить это?Будет ли это иметь какое-либо влияние, если мы удалим его.

module_logger = logging.getLogger("exampleApp.otherMod2")

Вопрос 2:

Нет никакого обработчика, определенного для нижеописанного логгера в otherMod2.py, но он все еще записывается в файл new_snake.log,как это возможно

logger = logging.getLogger("exampleApp.otherMod2.add")
logger.info("added %s and %s to get %s" % (x, y, x + y))

1 Ответ

0 голосов
/ 03 декабря 2018

Чтобы ответить на оба вопроса:

Вопрос 1

Вы можете удалить регистратор уровня модуля exampleApp.otherMod2, однако вы можете сохранить его так, чтобыдругой код в модуле может использовать его.

Создание логгера уровня модуля - рекомендуемый подход - обычно с помощью вызова logger.getLogger(__name__).Это настраивает регистратор, используя ту же иерархию, что и структура пакета модуля.

Вопрос 2

Регистраторы Python строятся в иерархии, которая определяется точками вимя логгера.По умолчанию события, записанные ниже по иерархии, также передаются регистраторам выше по иерархии.

Так что, хотя у вашего exampleApp.otherMod2.add регистратора нет обработчика, событие передается на регистратор верхнего уровня exampleApp, который выводит его в файл журнала.

Это поведение контролируетсяpropagate атрибут.Вы можете установить его на False, чтобы регистраторы более высокого уровня не получали события.

logger = logging.getLogger("exampleApp.otherMod2.add")
logger.propagate = False
logger.info("added %s and %s to get %s" % (x, y, x + y))

В этом случае вам нужно будет подключить обработчик к exampleApp.otherMod2.add, если вы хотите, чтобы он выводил что-либо.

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