python - 在 Python 中调用 getLogger 之前,我是否需要显式检查 __name__ == "__main__"?

标签 python logging

我相信在使用 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/

相关文章:

python - urllib2:提交表单然后重定向

windows - 无法在 pentaho 数据集成中找到日志文件

linux - 您将如何设计一个系统来保护 Linux 中的日志信息?

iphone - 获取 iPhone 上之前的运行、崩溃日志

java - 如何从 jar 文件中获取 log4j 输出

python - 如果我有 anaconda,如何在 PyCharm 上安装 GPflow?

python - 如何从唯一列表和 Counter 对象创建计数列表?

java - 运行 GAE/J 测试用例时如何隐藏来自 LocalServiceTestHelper 的 INFO 消息?

python - 将 QMimeData 粘贴到另一个窗口的 QTextEdit

python - 将 Cassandra 数据加载到 Titan/Neo4J 中