我写了很多模块的大程序。在同一模块中,我希望使用日志记录。在 Python 中登录的最佳实践是什么? 我应该使用导入标准日志记录模块并在我的每个文件中使用它吗:
#proxy_control.py
#!/usr/bin/env python3
import logging
class ProxyClass():
def check_proxy():
pass
logging.basicConfig(filename='proxy.log', level=logging.INFO)
logging.info('Proxy work fine')
或者也许我应该编写一个 MyLog() 类继承自默认日志记录并在我的所有其他模块中使用它?
#proxy_control.py
#!/usr/bin/env python3
import MyLog
class ProxyClass():
def check_proxy():
pass
Mylog.send_log('Proxy work fine')
#my_log.py
#!/usr/env/bin python3
import logging
class MyLog():
def send_log(value):
pass
最佳答案
一个典型的约定是在每个需要日志记录的模块的顶部定义一个记录器,然后在整个模块中使用该记录器对象。
logger = logging.getLogger(__name__)
这样,记录器将遵循您的包名称(即。package.subpackage.module
)。这在日志记录模块中很有用,因为记录器会根据记录器名称向上传播消息(即 parent.child
会将消息向上传递给 parent
)。这意味着您可以在顶级记录器上进行所有配置,它将从包中的所有子记录器获取消息。或者,如果其他人正在使用您的库,他们将很容易配置从您的库中获取哪些日志消息,因为它具有一致的命名空间。
对于库,您通常不希望显示日志消息,除非用户明确启用它们。除非您设置处理程序,否则 Python 日志记录将自动记录到 stderr,因此您应该添加 NullHandler到您的顶级记录器。这将防止消息自动打印到 stderr。
logger = logging.getLogger(__name__)
logger.addHandler(logging.NullHandler())
注意 - NullHandler是Python2.7新增的,之前的版本需要自己实现。
关于python - 我应该使用日志模块还是日志类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34940302/