Я пытаюсь добавить протоколирование в мое приложение, но не могу применить форматирование к сообщениям журнала подмодулей моего приложения… Я назначаю регистраторам имя модуля (__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
Чего мне не хватает, чтобы сконфигурированное форматирование последовательно применялось как к основному модулю, так и ко всем подмодулям, которые могут быть в нисходящем направлении?