我具有以下python包结构。
python_logging
python_logging
__init__.py
first_class.py
second_class.py
run.py
这是__init__.py
初始化 .py
import logging
import logging.config
# Create the Logger
loggers = logging.getLogger(__name__)
loggers.setLevel(logging.DEBUG)
# Create the Handler for logging data to a file
logger_handler = logging.FileHandler(filename='C:\Python\Log\stest.txt')
logger_handler.setLevel(logging.DEBUG)
# Create a Formatter for formatting the log messages
logger_formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
# Add the Formatter to the Handler
logger_handler.setFormatter(logger_formatter)
# Add the Handler to the Logger
loggers.addHandler(logger_handler)
loggers.info('Completed configuring logger()!')
这是first_class.py的代码
import logging
class FirstClass(object):
def __init__(self):
self.current_number = 0
self.logger = logging.getLogger(__name__)
def increment_number(self):
self.current_number += 1
self.logger.warning('Incrementing number!')
self.logger.info('Still incrementing number!!')
这是second_class.py的代码
class SecondClass(object):
def __init__(self):
self.enabled = False
self.logger = logging.getLogger(__name__)
def enable_system(self):
self.enabled = True
self.logger.warning('Enabling system!')
self.logger.info('Still enabling system!!')
这是run.py的代码
from LogModule.first_class import FirstClass
from LogModule.second_class import SecondClass
number = FirstClass()
number.increment_number()
system = SecondClass()
system.enable_system()
这是日志文件中的输出
LogModule - INFO - Completed configuring logger()!
LogModule.first_class - WARNING - Incrementing number!
LogModule.first_class - INFO - Still incrementing number!!
LogModule.second_class - WARNING - Enabling system!
LogModule.second_class - INFO - Still enabling system!!
问题::在 init .py中初始化文件处理程序时,number.increment_number()和system.enable_system()如何写入日志文件?这两个类都有不同的getloggers。任何人都可以解释,这将有所帮助。
答案 0 :(得分:1)
每个记录器都有一个父级,在Python中,您可以认为所有记录器都构造为一个“树”。如果将处理程序添加到一个记录器中,则其子记录器也将共享这些处理程序。因此,这意味着您无需为每个记录器创建处理程序,否则在每个记录器上设置处理程序将是重复且无聊的。
返回您的样本,包装结构
python_logging
python_logging
__init__.py
first_class.py
second_class.py
run.py
在__init__.py
文件中,
# Create the Logger
loggers = logging.getLogger(__name__)
记录器名称为<python_logging>
。
在first_class.py
self.logger = logging.getLogger(__name__)
记录器名称为<python_logging>.<first_class>
。
因此first_class.py
中的记录器是__ini__.py
中的记录器的子代