我相信在使用 Python 的内置日志记录模块时,将主模块中的 logger
作为根记录器是标准做法。假设这是正确的,在我看来,对于任何可能会或可能不会作为主要运行的模块,我都需要明确检查。原因是,如果我遵循调用 logging.getLogger(__name__)
的标准做法,我将得到一个名为 __main__
的记录器,而不是根记录器:
import logging
print logging.getLogger().name # root
print logging.getLogger(__name__).name # __main__
最好的做法是始终检查吗?
if __name__ == "__main__":
logger = logging.getLogger()
else:
logger = logging.getLogger(__name__)
这还不错,因为我总是有其他代码只有在 __name__ == "__main__"
时才会运行(通常包括对 logging.basicConfig
的调用)但如果只需要一行而不是更多行就好了。
最佳答案
是的 - 我相信这是个好主意。因为——发生的事情如下——
如果您正在运行一个程序作为 python prog.py -(__name__
将是 __main__
)并且您将获得 root
记录器(预期)。或者你甚至可以给一个你喜欢的名字(比如 prog
)。当您 import
该模块时 - 名称将是模块的名称。 (在本例中为不带扩展名的 python 文件名 prog
),这将帮助您识别日志的来源 - 这正是您想要的。所以总的来说,这样做是个好主意。
关于python - 在 Python 中调用 getLogger 之前,我是否需要显式检查 __name__ == "__main__"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30824981/