Python Logging 最佳实践
背景 链接到标题 最近在工作中要新增一个服务,需要处理服务日志,之前每次使用 logging 都是很简单的配置,没有 了解过最佳实践, google 到了 fangpenlin 写的一篇博客(https://fangpenlin.com/posts/2012/08/26/good-logging-practice-in-python/), 很受用,因此翻译过来便于自己以后回顾使用,也希望大家能够正确配置日志,对运维同学友好些~
Good Logging practice in Python 链接到标题 在显示中,日志是重要的。当你在转账时,它们是转账记录。当飞机起飞时,黑匣子会记录所有事情。 如果某些事情发生了错误,人们可以通过阅读日志有机会弄清楚发生了什么。同样,在系统开发、排查 和运行中日志也是重要的。当你编写了一个服务,日志就是必须品。如果没有日志,我几乎不可能发现 错误如果服务已经挂掉。不仅仅是服务,日志对于桌面应用也是重要的。举个例子,当你的程序在你 客户电脑崩溃了,你可以让他们发送日志文件给你,你才有可能去查找为什么崩溃。相信我,你永远 不知道在不同的电脑环境中会发生什么奇怪的问题.
Print 不是个好主意 链接到标题 尽管日志很重要,但是不是所有的开发者都知道如何正确的使用。我见过一些开发者在开发过程中插入 一些 print ,在开发结束时删除这些 print。向下面这样:
print 'Start reading database' records = model.read_recrods() print '# records', records print 'Updating record ...' model.update_records(records) print 'done' 当程序是一个简单的脚本时这是工作的,但是对于一个复杂的系统,你最好不要通过这种途径记录日志。 第一,你在日志中无法记录重要的信息,你可能看到很多垃圾信息在日志中,但是没有找到任何有用的。 你也不能通过不修改代码的方式控制日志的输出,还有可能在不使用这些 print 的时候忘记删除掉。 所有的 print 信息都将输出到标准输出中,这个是要禁止的。当然你可以输出到标准错误输出中,但是 这仍不是记录日志的最佳实践。
使用 Python 标准库 Logging 链接到标题 所以,如何正确的记录日志? 很简单,使用标准库中的 logging 模块。感谢 Python 社区,logging 在标准库中,它被设计的灵活且易用。你可以使用 logging 像下面这样: