Swoft2 框架精华教程:CLog 使用篇

CLog 概述

CLog模块主要是用来记录 swoft 启动、运行过程中的所有的 Console 日志的一个工具类,由一组记录不同级别日志的静态方法接口组成。源码位于:vendor/swoft/log/src/Helper/CLog.php。其静态属性 $clogger 中记录了真正的的实现类 CLogger

CLogger 通过重写父类 \Monolog\Logger的方法 addRecord,来实现日志信息是否通过 console 输出(可以同时将 console 输入内容记录日志文件)。

同级目录下的 Log.php,与 CLog.php 实现方式类似,都是通过静态方法(不用实例化类)调用日志相关的方法。Log 类主要记录写入文件日志。在 CLoggerCFileHandler 中会进行相关的调用。

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 时候才会进行输出内容