简介
一个高效、快速、稳定的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();