Форматирование сообщений Python Log не применяется к сообщениям подмодулей - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь добавить протоколирование в мое приложение, но не могу применить форматирование к сообщениям журнала подмодулей моего приложения… Я назначаю регистраторам имя модуля (__name__), как это рекомендовано во многих местах, но это похоже не хватает…

Основной модуль:

####test_logging_modules.py

import logging
from test_logging_module1 import *

class myApplication():
    def __init__(self):
        self.logger=self.logConfig()
        print("Logger name is:")
        print(self.logger.name)
        self.logger.info("Creating a new App")
        print("here is a new App")
        self.attribute1=moduleLogObject()


    def logConfig(self):
        fileLogFormat='%(asctime)s - %(levelname)s - %(message)s'
        consoleLogFormat='%(asctime)s - %(name)s - %(levelname)s - %(message)s'

        # create logger
        logger = logging.getLogger(__name__)
        logger.setLevel(logging.DEBUG)

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

        # create formatter
        consoleFormatter = logging.Formatter(consoleLogFormat)

        # add formatter to ch
        ch.setFormatter(consoleFormatter)

        # add ch to logger
        logger.addHandler(ch)

        ####FILE HANDLER####
        # create file handler and set level to debug
        fh = logging.FileHandler('myApp_Log.txt')
        fh.setLevel(logging.DEBUG)

        # create formatter
        fileFormatter = logging.Formatter(fileLogFormat)

        # add formatter to ch
        fh.setFormatter(fileFormatter)

        # add ch to logger
        logger.addHandler(fh)

        logger.info('Logging is started!!')

        return logger




if __name__=="__main__":
    print("This is main!")

    myApp=myApplication()

подмодуль:

###test_logging_module1.py
import logging

class moduleLogObject():
    def __init__(self):
        self.logger=logging.getLogger(__name__)
        print("Logger name is:")
        print(self.logger.name)
        self.logger.info("Object is initializing - INFO")
        self.logger.warning("Object is really initializing - WARNING")
        logging.info("Logging says Object is initializing - INFO")
        logging.warning("Logging says Object is really initializing - WARNING")

Выход:

This is main!
2019-03-08 06:20:03,456 - __main__ - INFO - Logging is started!!
Logger name is:
__main__
2019-03-08 06:20:03,568 - __main__ - INFO - Creating a new App
here is a new App
Logger name is:
test_logging_module1
Object is really initializing - WARNING
WARNING:root:Logging says Object is really initializing - WARNING

Сообщения журнала из верхнего модуля отображаются правильно, включая отметку времени, имя модуля, уровень журнала и сообщение журнала:

2019-03-08 06:20:03,456 - __main__ - INFO - Logging is started!!
2019-03-08 06:20:03,568 - __main__ - INFO - Creating a new App

С другой стороны, сообщения журнала из субмодуля, похоже, имеют форматирование по умолчанию:

Object is really initializing - WARNING
WARNING:root:Logging says Object is really initializing – WARNING

Чего мне не хватает, чтобы сконфигурированное форматирование последовательно применялось как к основному модулю, так и ко всем подмодулям, которые могут быть в нисходящем направлении?

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