php高效日志扩展--SeasLog

2021-03-23
  1. 简介
    1. 功能
    2. 安装
  2. 配置
    1. 基础配置
    2. 存储介质
    3. 自动化配置
    4. 区分日志文件
    5. 模板
    6. 缓冲配置
    7. CLI
  3. SeasLog类
    1. 创建对象
    2. 记录日志
    3. 设置SeasLog
    4. 保存日志

简介

一个高效、快速、稳定的PHP日志扩展

满足以下需求

    分模块、分级别
    配置简单(最好是勿须配置)
    日志格式清晰易读
    应用简单、性能很棒

提供功能

    在PHP项目中便捷、规范地记录Log
    可配置的默认Log目录与模块
    指定Log目录与获取当前配置
    初步的分析预警框架
    高效的日志缓冲、便捷的缓冲 debug
    遵循PSR-3日志接口规范
    自动记录错误信息
    自动记录异常信息
    连接TCP端口,以RFC5424格式发送日志
    连接UDP端口,以RFC5424格式发送日志
    支持 RequestId 区分请求
    支持日志模板自定义

安装

扩展地址:https://pecl.php.net/package/seaslog

配置

基础配置

//日志存储的默认根路径。默认值为"/var/log/www"。
seaslog.default_basepath

//时间的格式。默认值为"Y-m-d H:i:s"
seaslog.default_datetime_format

//日志记录的默认 Logger。默认值为 "default"。
seaslog.default_logger

//允许日志被记录的级别。默认为8(全部日志)。 0-EMERGENCY 1-ALERT 2-CRITICAL 3-ERROR 4-WARNING 5-NOTICE 6-INFO 7-DEBUG 8-ALL
seaslog.level

//记录日志时的重试次数。默认为0(不重试)
seaslog.appender_retry

存储介质

//日志存储介质的切换选型。1File 2TCP 3UDP (默认为1);当seaslog.appender 被切换至`2 (TCP)`或者`3 (UDP)`时,SeasLog会将日志发送至tcp://remote_host:remote_port或者udp://remote_host:remote_port服务器。
seaslog.appender

//如果要使用TCP或者UDP为存储介质,需要配置远端的IP。默认值为 "127.0.0.1"
seaslog.remote_host

//如果要使用TCP或者UDP为存储介质,需要配置远端服务的端口号。默认值为514
seaslog.remote_port

//如果要使用TCP或者UDP为存储介质,需要配置超时时间。默认值为1秒。
seaslog.remote_timeout

自动化配置

//自动将PHP的Final Error记录在默认Logger中。1-Y(默认值) 0-N
seaslog.trace_error

//自动将PHP的异常记录在默认Logger中。1-Y 0-N(默认值)
seaslog.trace_exception

//自动将PHP的Notice记录在默认Logger中。1-Y 0-N(默认值)
seaslog.trace_notice

//自动将PHP的 Warning 记录在默认Logger中。1-Y 0-N(默认值)
seaslog.trace_warning

//自动地Trim掉日志信息中的\n和\r。1-On 0-Off(默认值)
seaslog.trim_wrap

区分日志文件

//是否按每小时一个记录进行区分。1-Y 0-N(默认值);为1时SeasLog将每隔一个小时创建一个文件。
seaslog.disting_by_hour

//是否按目录进行区分。1-Y(默认值) 0-N;为1时SeasLog将为每一个Logger创建一个单独的目录进行区分
seaslog.disting_folder

//是否按日志级别进行区分。1-Y 0-N(默认值);为1时SeasLog将在创建日志文件时,使用info/warn/error或其他级别进行区分。
seaslog.disting_type

模板

//默认日志模板。 默认值是"%T | %L | %P | %Q | %t | %M"
seaslog.default_template
	模板变量
		%L	日志级别。
		%M	日志信息。
		%T	时间。 比如:`2017-08-16 19:15:02`,受配置项`seaslog.default_datetime_format`的影响。
		%t	时间戳。比如:`1502882102.862`,精确到毫秒。
		%Q	请求ID。用于区分每一个请求, 如果没有调用`SeasLog::setRequestId($string)`函数, 将在请求初始化的时候,使用PHP内置函数`static char *get_uniqid ()`来生成 Unique ID。
		%H	主机名。
		%P	进程ID。
		%D	域名:端口号。比如:`www.cloudwise.com:80`;在CLI下运行时,该值为 `cli`。
		%R	请求URI。比如:`/app/user/signin`。 在CLI下运行时,值为Index Script名称,比如:`CliIndex.php`。
		%m	请求Method。比如:`Get`。在CLI下运行时,值为Command Script,比如:`/bin/bash`。
		%I	客户端IP;在CLI下运行时,值为`local`。 取值优先级为:HTTP_X_REAL_IP > HTTP_X_FORWARDED_FOR > REMOTE_ADDR
		%F	文件名:行号。比如:`UserService.php:118`。
		%U	内存使用量。单位为byte。 调用PHP内置方法`zend_memory_usage`得到该值。
		%u	最大内存使用峰值。单位为byte。 调用PHP内置方法`zend_memory_peak_usage`得到该值。
		%C	`TODO` Class::Action。如`UserService::getUserInfo`

缓冲配置

// 修改内存中Buffer的条数。默认值为0(不使用Buffer)。 如果buffer_size > 0,SeasLog将预先将日志写入内存Buffer,并在Buffer的条数大于或等于该值时,写往存储介质,然后刷新内存中的Buffer。
seaslog.buffer_size

// 开启使用内存中的日志Buffer。1-Y 0-N(默认值);如果Buffer是开启状态,SeasLog会将日志预先记录在内存中,并且在请求结束时、或PHP进程结束时(PHP RSHUTGOWN或PHP MSHUTDOWN)时写往存储介质。
seaslog.use_buffer

CLI

//在CLI模式下是否关闭Buffer的选项。 1-Y 0-N(默认值)
seaslog.buffer_disabled_in_cli

SeasLog类

创建对象

new SeasLog()

记录日志

// 记录各级别日志消息$message,$message中的占位符通过数组$content替换;例如$message是`log info from {NAME}`, $content是 `array('NAME' => neeke)`,

// 记录alert级别日志$message,
$seasLog->alert($message, $content);

// 记录notice级别日志$message
$seasLog->notice($message, $content);

// 记录info级别日志$message
$seasLog->info($message, $content);

// 记录debug级别日志$message
$seasLog->debug($message, $content);

// 记录warning级别日志$message
$seasLog->warning($message, $content);

// 记录emergency级别日志$message
$seasLog->emergency($message, $content);

// 记录error级别日志$message
$seasLog->error($message, $content);

// 记录critical级别日志$message
$seasLog->critical($message, $content);

$levels = [
    SEASLOG_DEBUG,
    SEASLOG_INFO,
    SEASLOG_NOTICE,
    SEASLOG_WARNING,
    SEASLOG_ERROR,
    SEASLOG_CRITICAL,
    SEASLOG_ALERT,
    SEASLOG_EMERGENCY,
];
// 记录$level级别日志$message
$seasLog->log($level, $message, $content);

// 从$log_path日志中获取$level级别的关键字为$key_word消息,从$start条开始截取$limit条,消息以$order排序;默认值为SEASLOG_DETAIL_ORDER_ASC,(SEASLOG_DETAIL_ORDER_ASC,SEASLOG_DETAIL_ORDER_DESC)
// 使用命令"grep -ai '{level}' | grep -ai '{key_word}' | sed -n '{start},{limit}'p"使用系统管道查询信息返回数组给PHP
$seasLog->analyzerDetail($level, $log_path, $key_word, $start, $limit, $order);

设置SeasLog

//设置日期格式
$seasLog->setDatetimeFormat($format);

// 设置根目录
$seasLog->setBasePath($base_path);

// 设置Logger名
$seasLog->setLogger($logger);

// 设置区分请求的request_id,不设置系统将自动设置
$seasLog->setRequestID($request_id);

$keys = [
    SEASLOG_REQUEST_VARIABLE_DOMAIN_PORT,     // 请求域名和端口
    SEASLOG_REQUEST_VARIABLE_REQUEST_URI,     // 请求路径
    SEASLOG_REQUEST_VARIABLE_REQUEST_METHOD,  // 请求方法
    SEASLOG_REQUEST_VARIABLE_CLIENT_IP,       // 客户端端口
];
// 手动设置SeasLog请求变量
$seasLog->setRequestVariable($key, $value);

保存日志

// 将缓冲区日志保存到seaslog.appender介质
$seasLog->flushBuffer();

 

{/if}