Python 记录器实例不存在';不要返回任何日志记录
这是一个场景,其中一个模块包含一个记录器,并将其导入到另一个模块中。但是,当调用main.py时,不会将任何日志记录写入日志。为了调用日志,可以修改哪些内容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
#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.