【发布时间】:2021-08-05 18:49:54
【问题描述】:
我的文件中有一个记录器,它附加了一个处理程序,并且它的级别已设置为调试。尽管如此,在运行我的程序时,调试语句不会打印到控制台。根记录器仍设置为警告,但我知道如果我向记录器添加处理程序,则日志将传递给该处理程序并在传递给父记录器(最终为空记录器)之前记录。情况似乎并非如此。对于上下文,这里是文件中的代码:
logger = logging.getLogger(__name__)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
logger.addHandler(console_handler)
class OpenBST:
app_data_folder = Path(user_data_dir(appname=lib_info.lib_name,
appauthor="HydrOffice"))
def __init__(self,
progress: CliProgress = CliProgress(use_logger=True),
app_data_path: Path = app_data_folder) -> None:
app_data_path.mkdir(exist_ok=True, parents=True)
self.progress = progress
self._prj = None
self._app_info = OpenBSTInfo(app_data_path=app_data_path)
self.current_project = None
logging.debug("App instance started")
下面是在示例脚本中调用它的地方:
from pathlib import Path
from hyo2.openbst.lib.openbst import OpenBST
logging.basicConfig()
logger = logging.getLogger(__name__)
project_directory = Path(os.path.expanduser("~/Documents/openbst_projects"))
project_name = "test_project"
# Create App instance
obst = OpenBST()
为什么logger.debug('App instance started') 不打印到控制台?
编辑:
下面的代码包括来自@Jesse R 的建议
__init__ 修改如下:
class OpenBST:
app_data_folder = Path(user_data_dir(appname=lib_info.lib_name,
appauthor="HydrOffice"))
def __init__(self,
progress: CliProgress = CliProgress(use_logger=True),
app_data_path: Path = app_data_folder) -> None:
app_data_path.mkdir(exist_ok=True, parents=True)
logger = logging.getLogger(__name__)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
logger.addHandler(console_handler)
self.progress = progress
self._prj = None
self._app_info = OpenBSTInfo(app_data_path=app_data_path)
self.current_project = None
logger.debug("App instance started")
没有生成输出(退出代码 0)。 我的理解是附加到记录器的处理程序将在将日志传递到链上之前执行(其中根仍设置为警告)。
【问题讨论】:
-
当您致电
debug时,logging与logger可能是代码中的拼写错误? -
这绝对是一个错字。并立即修复,谢谢。但问题还是一样,很可能是继承问题,如下所述。
标签: python python-3.x logging