使用PHP
扩展SeasLog
日志系统
白天不知夜晚的黑,项目上线不懂异常的崩盘...危险危险!一起来看看最直接的办法,打造一个日志系统。^_^
日志设计三原则
1.记录系统运行时的信息 2.系统项目日志、应用程序服务日志、安全日志 3.日志功能不能影响用户正常使用
不要犹豫直接选择 SeasLog
扩展
SeasLog
是一个C
语言编写的PHP
扩展,提供一组规范标准的功能函数,在PHP项目中方便、规范、高效地写日志,以及快速地读取和查询日志。
安装SeasLog
扩展说明步骤:
- 下载
可以进入
pecl
下载最新的稳定版本
$ wget https://pecl.php.net/get/SeasLog-1.8.4.tgz
- 解压
$ tar zxvf SeasLog-1.8.4.tgz
$ cd ./SeasLog-1.8.4
- 编译安装
$ phpize 运行后当前文件下多出configure文件
$ find / -name 'php-config' 查找出php-config文件位置
$ ./configure --with-php-config=/usr/local/bin/php-config
$ make
$ make install
- 配置php.ini
[SeasLog]
;configuration for php SeasLog module
extension = "/usr/local/opt/php56-seaslog/seaslog.so"
;默认log根目录
seaslog.default_basepath = "/tmp/log/seaslog-test"
;默认logger目录
seaslog.default_logger = "default"
;日期格式配置 默认"Y-m-d H:i:s"
seaslog.default_datetime_format = "Y-m-d H:i:s"
;日志格式模板 默认"%T | %L | %P | %Q | %t | %M"
seaslog.default_template = "%T | %L | %R | %C | %F | %Q | %M"
;是否以目录区分Logger 1是(默认) 0否
seaslog.disting_folder = 1
;是否以type分文件 1是 0否(默认)
seaslog.disting_type = 1
;是否每小时划分一个文件 1是 0否(默认)
seaslog.disting_by_hour = 1
;是否启用buffer 1是 0否(默认)
seaslog.use_buffer = 1
;buffer中缓冲数量 默认0(不使用buffer_size)
seaslog.buffer_size = 100
;cli运行时关闭buffer
;1是 0否(默认)
seaslog.buffer_disabled_in_cli = 0
;记录日志级别,数字越大,根据级别记的日志越多。
;0-EMERGENCY 1-ALERT 2-CRITICAL 3-ERROR 4-WARNING 5-NOTICE 6-INFO 7-DEBUG 8-ALL
;默认8(所有日志)
;
; 注意, 该配置项自1.7.0版本开始有变动。
; 在1.7.0版本之前, 该值数字越小,根据级别记的日志越多:
; 0-all 1-debug 2-info 3-notice 4-warning 5-error 6-critical 7-alert 8-emergency
; 1.7.0 之前的版本,该值默认为0(所有日志);
seaslog.level = 8
;日志函数调用回溯层级
;影响预定义变量 %F 中的行数
;默认0
seaslog.recall_depth = 0
;自动记录notice 默认0(关闭)
seaslog.trace_notice = 1
;自动记录warning 默认0(开启)
seaslog.trace_warning = 1
;自动记录错误 默认1(开启)
seaslog.trace_error = 1
;自动记录异常信息 默认0(关闭)
seaslog.trace_exception = 1
;日志存储介质 1File 2TCP 3UDP (默认为1)
seaslog.appender = 1
;写入重试次数
;默认0(不重试)
seaslog.appender_retry = 0
;接收ip 默认127.0.0.1 (当使用TCP或UDP时必填)
seaslog.remote_host = "127.0.0.1"
;接收端口 默认514 (当使用TCP或UDP时必填)
seaslog.remote_port = 514
;接收端口的超时时间 默认1秒
seaslog.remote_timeout = 1
;过滤日志中的回车和换行符 (默认为0)
seaslog.trim_wrap = 1
;是否开启抛出SeasLog自身异常 1开启(默认) 0否
seaslog.throw_exception = 1
;是否开启忽略SeasLog自身warning 1开启(默认) 0否
seaslog.ignore_warning = 1
重启PHP
服务之后查看phpinfo()
中的SeasLog
模块:
作者: SeasLog Author Chitao.Gao [ neeke@php.net
]
官方文档: SeasLog Supports
https://github.com/SeasX/SeasLog
实际应用
Seaslog的常用方法
- 配置方法:
setBasePath
getBasePath
setLogger
getLastLogger
- 写日志方法:
log
info
notice
debug
warning
error
- 读日志方法:
analyzerCount
analyzerDetail
代码示例
<?php
/*设置基本地址*/
$bool_set_base_path = SeasLog::setBasePath('/usr/local/var/www/testseaslog/log');
var_dump($bool_set_base_path);
/*获取基本地址*/
$str_path = SeasLog::getBasePath();
var_dump($str_path);
/*设置模块*/
$bool_set_logger = SeasLog::setLogger('test');
var_dump($bool_set_logger);
/*设置唯一识别ID*/
$bool_reqid = SeasLog::setRequestID('1234567890123');
var_dump($bool_reqid);
/*记录日志*/
$bool_log = SeasLog::log(SEASLOG_DEBUG, 'log message from {name}',['name'=>'eson']);
var_dump($bool_log);
/*查看日志*/
$data = SeasLog::analyzerDetail(SEASLOG_ALL);
var_dump($data);
注意:
使用analyzerDetail
函数查看日志时:正序使用的是管道调用cat
,倒序使用的是tac
命令。
<?php
/**
* 以数组形式,快速取出某类型log的各行详情
*
* @param $level
* @param string $log_path
* @param null $key_word
* @param int $start
* @param int $limit
* @param $order 默认为正序 SEASLOG_DETAIL_ORDER_ASC,可选倒序 SEASLOG_DETAIL_ORDER_DESC
*
* @return array
*/
$arr = SeasLog::analyzerDetail(SEASLOG_ALL,'*',NULL,1,20,SEASLOG_DETAIL_ORDER_DESC);
补充:
MacOS
下安装使用tac
命令:
安装coreutils
软件包:
$ brew install coreutils
$ ln -s /usr/local/bin/gtac /usr/local/bin/tac
Thanks♪(・ω・)ノ 感谢你长得那么好看还来看我的博客!see you around ~
[hermit auto="1" loop="0" unexpand="1" fullheight="0"]remote#:23[/hermit]