阿里云日志在单条日志频繁写入时,可能会出现QPS限制。因此,开发了一个日志填写与传输分离的工具包,减少请求次数。
- 日志填写与传输分离;
- 单条日志可追加字段;
- 提供了日志单例类;
- 支持按《PSR-3: Logger Interface》日志规范的方法使用。
composer require lynncho/aliyun-log-gather-write
- 使用阿里云日志配置初始化
- 填写日志,收集在日志实例中
- 集中传输日志,传输将清空累积的日志
注:请留意日志传输完成之后,是否还有日志需要传输?否则存在日志丢失的风险。比如后续的框架运行日志、报错日志。
日志实例初始化
use Lynncho\Aliyunlog\GatherWrite\Logger;
use Lynncho\Aliyunlog\GatherWrite\LoggerSingle;
$config = [
'endPoint' => '',
'accessId' => '',
'accessKey' => '',
'project' => '',
'logStore' => ''
];
$logger = new Logger($config);
//或者,使用静态单例初始化日志实例
LoggerSingle::init($config);
//或者,使用静态单例嵌套日志实例
LoggerSingle::setLogger($logger);
使用PSR日志标准方法填写日志
use Psr\Log\LogLevel;
$logger->log(LogLevel::DEBUG, 'log info', ['log info' => ['test']]);
$logger->info('hello world', ['info' => ['test']]);
$logger->error('has error', ['info' => ['error']]);
//静态单例方法,效果一致
LoggerSingle::info('LoggerSingle info', ['info' => ['test']]);
LoggerSingle::error('LoggerSingle error', ['info' => ['test']]);
自定义单条日志字段
//日志默认拥有Message、Level、Date、Content字段,可对最新一条日志追加自定义字段。自定义字段优先。
$logger->addLogItemFields(['TestField' => 123]);
//自定义一条新日志
$logger->addLogItemFields(['NewLogTestField' => 1234], true);
推送日志
//传输操作将清空累积的日志
$logger->push();
//或者,使用静态单例推送
LoggerSingle::push();
- 如果存在容器,建议将
Lynncho\Aliyunlog\GatherWrite\Logger
实例放在容器中,以便实现单例效果; - 如果没有容器,建议使用
Lynncho\Aliyunlog\GatherWrite\LoggerSingle
门面静态类;
本日志包主要是日志写入方法的封装,日志读取等更多方法,请直接使用阿里云日志客户端实例。
// 获取阿里云日志配置
$config = getConfig();
// 获取阿里云日志客户端实例
$client = getLogClient();