我有一个 Python 代码,它实现了一个用于处理独立数据集的类。对于每个数据集,我从类中实例化一个对象,该对象处理数据集。我想实现一个日志记录功能,在控制台和与每个数据集一起存储的日志文件中显示日志消息。
我在模块级别实现了一个根记录器,并在创建每个对象时实现了一个带有 FileHandler 的特定记录器。它可以记录课堂内部发生的一些信息,但我也在使用另一个工具箱模块,那里发生的事情只记录在控制台中,而不是记录在日志文件中。
为了说明这个问题,我实现了一个演示模块:
├──log
│ ├── __init__.py
│ ├── my_object.py
│ ├── toolbox.py
内容__init__.py:
import logging
logging.basicConfig(format='%(name)12s - %(levelname)5s - %(message)s')
_log = logging.getLogger(__name__)
_log.setLevel(logging.DEBUG)
内容my_object.py:
import logging
from . import toolbox
class MyObject():
def __init__(self, name):
self._name = name
# configure logging
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
if logger.hasHandlers():
for hdlr in logger.handlers:
logger.removeHandler(hdlr)
handler = logging.FileHandler('/home/user/Desktop/test/{}.log'.format(name), mode='w', encoding='utf-8')
formatter = logging.Formatter('%(name)12s - %(levelname)5s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
self._logger = logger
def do_something(self):
self._logger.info('{} is doing something'.format(self._name))
toolbox.use_tool(self._name)
内容toolbox.py:
import logging
_log = logging.getLogger(__name__)
def use_tool(name):
_log.info('Using some tool for {}'.format(name))
然后,我运行这个:
import log
from log.my_object import MyObject
obj = MyObject('object1')
obj.do_something()
这是我在控制台中得到的:
object1 - INFO - object1 is doing something
log.toolbox - INFO - Using some tool for object1
这是我在/home/user/Desktop/test/object1.log文件中得到的:
object1 - INFO - object1 is doing something
如何让 log.toolbox 也显示在object1.log文件中?
千巷猫影
相关分类