Python 记录器实例不存在';不要返回任何日志记录

Python 记录器实例不存在';不要返回任何日志记录,python,python-3.x,logging,Python,Python 3.x,Logging,这是一个场景,其中一个模块包含一个记录器,并将其导入到另一个模块中。但是,当调用main.py时,不会将任何日志记录写入日志。为了调用日志,可以修改哪些内容 #objects.py import logging logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) formatter = logging.Formatter() log_handler = logging.FileHandler('log_ob

这是一个场景,其中一个模块包含一个记录器,并将其导入到另一个模块中。但是,当调用main.py时,不会将任何日志记录写入日志。为了调用日志,可以修改哪些内容

#objects.py

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

formatter = logging.Formatter()

log_handler = logging.FileHandler('log_objects.log')
log_handler.setFormatter(formatter)
logger.addHandler(log_handler)

class Person:
    def __init__(self):
        pass

        logger.info(f"A new {self.__class__.__name__} is created.")
我希望在日志中看到这一点:
“创建了一个新的人。”


执行时,日志中不会显示任何内容,因为您没有为
log\u objects.log
指定路径名,所以文件将在运行Python解释器的目录下创建,在本例中,该目录是
main.py
所在的目录,而不是
my\u objects
子目录下

如果要在
my\u objects
目录下创建
log\u objects.log
,可以指定相对路径:

log_handler = logging.FileHandler('my_objects/log_objects.log')

它按预期工作。”log_objects.log'是使用有效行创建的。 您是否希望文本也打印在控制台上?添加特定文件处理程序后,将覆盖默认处理程序

(或者)您可能不知道python中模块加载是如何发生的


$ python main.py

$ tree .
.
├── log_objects.log
├── main.py
└── my_objects
    ├── __init__.py
    └── objects.py


$ cat log_objects.log
A new Person is created.
log_handler = logging.FileHandler('my_objects/log_objects.log')

$ python main.py

$ tree .
.
├── log_objects.log
├── main.py
└── my_objects
    ├── __init__.py
    └── objects.py


$ cat log_objects.log
A new Person is created.