这篇文章介绍了 Python 的 logging 模块,包括它的设计以及针对更多复杂案例的适用方法。这篇文章不是写给开发者的文档,它更像是一个指导手册,来说明 Python 的 logging 模板是如何搭建的,并且激发感兴趣的人深入研究。
为什么使用 logging 模块?
也许会有开发者会问,为什么不是简单的 print 语句呢? Logging 模块有很多优势,包括:
多线程支持
通过不同级别的日志分类
灵活性和可配置性
将如何记录日志与记录什么内容分离
最后一点,将我们记录内容从记录方式中真正分离,保证了软件不同部分的合作。举个例子,它允许一个框架或库的开发者增加日志并且让系统管理员或负责运行配置的人员决定稍后应该记录什么。
Logging 模块中有什么
Logging 模块完美地将它的每个部分的职责分离(遵循 Apache Log4j API 的方法)。让我们看看一个日志线是如何通过这个模块的代码,并且研究下它的不同部分。
记录器(Logger)
记录器是开发者经常交互的对象。那些主要的 API 说明了我们想要记录的内容。
举个记录器的例子,我们可以分类请求发出一条信息,而不用担心它们是如何从哪里被发出的。
日志记录
日志记录是 logging 模块用来满足所有需求信息的包。它们包含了需要记录日志的地方、变化的字符串、参数、请求的信息队列等信息。
它们都是被记录的对象。每次我们调用记录器时,都会生成这些对象。但这些对象是如何序列化到流中的呢?通过处理器!
处理器
处理器将日志记录发送给其他输出终端,他们获取日志记录并用相关函数中处理它们。
比如,一个文件处理器将会获取一条日志记录,并且把它添加到文件中。
标准的 logging 模块已经具备了多种内置的处理器,例如:
多种文件处理器(TimeRotated, SizeRotated, Watched),可以写入文件中,
StreamHandler 输出目标流比如 stdout 或 stderr,
SMTPHandler 通过 email 发送日志记录,
SocketHandler 将日志文件发送到流套接字,
SyslogHandler、NTEventHandler、HTTPHandler及MemoryHandler等。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试