作为一个程序员,个人认为一个好的日志记录习惯是能称得上优秀所必备的素养之一。而且随着在行业内阅历的增长,这个好习惯在心目中的比重越来越高。
0. 日志的重要性
为了凸显log的重要程度,笔者不惜打乱已有的行文风格——在开始本篇标题标识的内容前,用一个比较典型的场景来说明下日志为何如此重要。
碰到QA提的一个bug的时候,笔者见识过两种方式的答复:
a) 请给我重现步骤和重现数据;
b) 把当时的日志给我。
答复前者的,一般需要花很多时间去找问题出现在那里,如果是别人开发的模块的话,花费的时间更多。而答复后者的,一般能很快的找到出问题的点,然后就可以开始进入修复的流程。(希望读者你已经是,或者有志并愿意努力成为后者)
从概念上来说:日志是一个可运行的、可维护的软件的基础组成部分;通过日志,我们可以了解软件系统在运行中的实时状态,历史状态和异常状态等。一个没有良好日志的软件是所有人的噩梦。
1. 概述
2. 实现
2.1 配置文件
以下配置存储为 文件,注意该配置文件中,笔者尽量减少了高级知识的引入,以期最大限度地减少初学者的心理和生理压力,读者可以在完成初步探索之后,在需求的驱动下自行进行扩展,学习是一个循序渐进的过程,慢慢来,不要着急。
在下面的配置中,我们只引入了一个logger,我们在程序中打印的日志都是通过它来进行输出的,并且提供了两种handler(console,file)。
2.2 代码实现
3. 最佳实践
任何一门知识点必然有一些最佳实践,提前知晓它们并努力去适应永远是一个利远大于弊的选择。
3.1 使用 作为日志名称(logger name)
这里先举个例子,假设你在模块中调用,即是调用了;这样做的好处至少有两个:
- 这样当你需要为logger添加配置时,你就只需要给”foo”添加配置,然后所有在”foo”里的模块都能共享相同的配置信息。
- 你在查看日志时,可以非常清晰地了解到某条日志信息是从哪个模块里输出的。
3.2 记录异常时记得带上堆栈信息
这一条不仅仅适用于Python;只要是有日志记录功能的地方,这一条都可以算得上是铁律了;我们这里重点看下Python中如何实现这一点:
3.3 在需要的时候实例化logger
4. 总结
Python中的logging是被作为标准库的一部分的,灵活性也非常高。而且正如Python一直所宣称的,logging的使用上也是相当地简单。
但是log的难点永远不是在其使用上,如何制定符合业务发展需要并且被广大开发人员接受并执行的日志规范,以及后期日志信息的提取和分析才是有关log话题的精华所在。
5. Links
- 最佳实践 – 2013年的时候找到的,没想到还有再次打开的一天
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览211637 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!