Swoft2 框架精华教程:CLog 使用篇
- 作者: 刘杰
- 来源: 技术那些事
- 阅读:91
- 发布: 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 时候才会进行输出内容