Swoft2 框架精华教程:CLog 使用篇
- 作者: 刘杰
- 来源: 技术那些事
- 阅读:217
- 发布: 2025-06-15 11:05
- 最后更新: 2025-06-15 11:05
CLog 概述
CLog模块主要是用来记录 swoft 启动、运行过程中的所有的 Console 日志的一个工具类,由一组记录不同级别日志的静态方法接口组成。源码位于:vendor/swoft/log/src/Helper/CLog.php。其静态属性 $clogger 中记录了真正的的实现类 CLogger。
CLogger 通过重写父类 \Monolog\Logger的方法 addRecord,来实现日志信息是否通过 console 输出(可以同时将 console 输入内容记录日志文件)。
同级目录下的 Log.php,与 CLog.php 实现方式类似,都是通过静态方法(不用实例化类)调用日志相关的方法。Log 类主要记录写入文件日志。在 CLogger 的 CFileHandler 中会进行相关的调用。
在 CFileHandler 实现的 write 方法中,会使用行格式化工具LineFormatter(对写入日志的行,进行格式的控制)。CEchoHandler 并未使用 LineFormatter。
CLog 解析
类图
classDiagram
direction TB
class CLog {
- static CLogger $clogger;
+ static init(array $config): void;
+ static debug(string $message, ... $params): void;
+ static info(string $message, ... $params): void;
+ static warning(string $message, ... $params): void;
+ static error(string $message, ... $params): void;
}
class CLogger {
- bool $enable; // 控制是否启用 console 日志
- HandlerInterface[] $handlers; // 控制日志的展示方式
+ addRecord(string $level, string $message, array $context=[]): bool;
+ setHandlers(array $handlers): CLogger;
+ setEnable(bool $enable): void;
}
class AbstractProcessingHandler {
<<abstract>>
+ handle(array $record): bool;
# abstract write(array $record): void; // 需要具体实现写入的方式
}
class CEchoHandler {
# write(array $record): void;
}
class CFileHandler {
# write(array $record): void;
}
CLog --> CLogger
CLogger "1" --> "*"AbstractProcessingHandler
CEchoHandler --|> AbstractProcessingHandler
CFileHandler --|> AbstractProcessingHandler
配置说明
控制台日志
swoft2 启动时候,会通过 SwoftApplication 的 getCLoggerConfig() 方法加载 CLog 的控制台日志配置,所以,我们可以在应用的 Application(SwoftApplication 的派生类)中,进行方法的重写,以改变 CLog 控制台日志配置。
php
$config = [
'enable' => true, // CLog 的总开关,关闭后不打印任何控制台日志
'name' => 'swoft', // 日志模块名称
'output' => true, // 是否启用输出设备(对控制台来说,输出设备就是命令行窗口)
'levels' => '', // 日志等级,debug, info, warning, error
'logFile' => '' // 日志文件路径
];
debug 类型的日志,只有在 SWOFT_DEBUG=1 时候才会进行输出内容