有很多关于使用Python登录的文章,但我没有找到任何关于在多个项目上对齐日志记录的全面内容。例如,假设人们重用在Github上公开的项目(这就是它的用途)是不合理的。 我相信任何项目都需要记录,特别是那些正在开发中的项目,所以我的问题是,如何使记录尽可能开放和可用?
最近,我一直喜欢在主程序包的__init__.py
中加载配置文件。
import logging.config
import sys
from traceback import print_exception
fileconf = "logging.conf"
try:
logging.config.fileConfig(fileconf)
except:
print "Could not use %s for configuration because:" % (fileconf,)
print_exception(*sys.exc_info())
然后每个模块将从专用日志记录模块logger.py
获取记录器:
import logging
def get_logger(name):
logger = logging.getLogger(name)
return logger
不幸的是,我没有看到对多个项目的直接扩展。我希望能够使用相同的配置文件作为标准。
那么如何创建易于使用超级项目日志配置的项目?也许检查是否已经以某种方式配置了日志记录?
答案 0 :(得分:1)
如果要为项目添加日志记录功能,则只需使用记录器并将配置保留给任何人/将要使用它们的任何人。
例如,假设您要在模块中记录某些内容:
def my_method():
try:
# do something...
except Exception as e:
logger = logging.getLogger(__name__)
logger.error("error doing something: {}".format(e))
__name__
返回模块名称,包括包路径(例如project.path.to.module),所以现在谁需要使用这个项目或多个项目使用相同的方式记录将加载自己的配置文件并定义每个项目的日志记录设置。
避免在模块级别加载配置,但保留它是可选的(在方法或if __name__ == '__main__'
内,以避免冲突)
这似乎是良好的日志记录实践的一个很好的参考:http://victorlin.me/posts/2012/08/26/good-logging-practice-in-python
答案 1 :(得分:1)
库项目永远不应该配置日志记录(尽管他们可能会提供帮助程序)。记录只应由主程序配置,并且也应在其if __name__ == '__main__'
代码路径中配置。在您描述的情况下,这将在包__main__.py
中(因为这是用于运行包的内容)而不是__init__.py
(尽可能避免导入时间副作用)。
我不明白你的logger.py
中有什么价值,因为使用
logger = logging.getLogger(__name__)
(在每个进行日志记录的模块中)大部分时间都适用于大多数人。
如果要使用标准配置文件,请坚持仅为根记录器配置处理程序(否则,您将配置特定于项目的记录器)。如果您使用的是dictConfig()
而不是fileConfig()
,则可以在例如{{1}}方面提供更大的灵活性。将库中的配置字典与主配置合并。