Yii框架的Log系统的分析
这篇讲的是 Yii 框架中日志(Log)系统的内部实现。作者从 logging 目录下的源代码出发,梳理了这个灵活且强大的日志模块是如何工作的。 文章的核心在于剖析其解耦设计:负责“打日志”的 CLogger 和负责“记录日志”的 CLogRouter 是两个独立的对象。CLogger 充当生产者,通过单例模式提供全局调用接口,并将日志信息存入一个内存缓冲区。当缓冲区满时,它会触发一个 onFlush 事件,而不是直接处理。 真正的处理逻辑由订阅了这个事件的 CLogRouter 等路由类来完成,它们作为消费者,在事件中将日志分派给不同的目标,比如文件、邮件或数据库。这种基于事件的发布-订阅模式,将日志的收集与分发完美解耦。文章还展示了如何通过 category 参数对日志进行灵活过滤,确保只处理需要关注的信息。 作者通过阅读源码,不仅展示了如何简单地调用 `Yii::getLogger()->log()`,更揭示了框架在简单接口背后,如何通过精巧的架构实现高性能和高扩展性的日志管理。