php日志系统 seaslog1.6.2 安装配置使用及简单的封装
在php的网站下载了seaslog1.6.2
和安装其他扩展的方式一样
seaslog在Github上的描述
为什么使用SeasLog
log日志,通常是系统或软件、应用的运行记录。通过log的分析,可以方便用户了解系统或软件、应用的运行情况;如果你的应用log足够丰富,也可以分析以往用户的操作行为、类型喜好、地域分布或其他更多信息;如果一个应用的log同时也分了多个级别,那么可以很轻易地分析得到该应用的健康状况,及时发现问题并快速定位、解决问题,补救损失。
php内置error_log、syslog函数功能强大且性能极好,但由于各种缺陷(error_log无错误级别、无固定格式,syslog不分模块、与系统日志混合),灵活度降低了很多,不能满足应用需求。
好消息是,有不少第三方的log类库弥补了上述缺陷,如log4php、plog、Analog等(当然也有很多应用在项目中自己开发的log类)。其中以log4php最为著名,设计精良、格式完美、文档完善、功能强大。推荐。
不过log4php在性能方面表现非常差,下图是SeasLog与log4php的ab并发性能测试( 测试环境:Ubuntu12.04单机,CPU I3,内存 16G,硬盘 SATA 7200): SeasLogVSlog4php
那么有没有一种log类库满足以下需求呢:
分模块、分级别
配置简单(最好是勿须配置)
日志格式清晰易读
应用简单、性能很棒
SeasLog 正是应此需求而生。
Github上的中文文档
https://github.com/Neeke/SeasLog/blob/master/README_zh.md
安装:
# tar zxf SeasLog-1.6.2.tgz # cd SeasLog-1.6.2 #/usr/local/php/bin/phpize #./configure --with-php-config=/usr/local/php/bin/php-config #make && make install
然后去php.ini配置
; configuration for php SeasLog module extension = seaslog.so seaslog.default_basepath = /tmp/seaslog ;默认log根目录 seaslog.default_logger = default ;默认logger目录 seaslog.disting_type = 1 ;是否以type分文件 1是 0否(默认) seaslog.disting_by_hour = 1 ;是否每小时划分一个文件 1是 0否(默认) seaslog.use_buffer = 1 ;是否启用buffer 1是 0否(默认) seaslog.buffer_size = 100 ;buffer中缓冲数量 默认0(不使用buffer_size) seaslog.level = 0 ;记录日志级别 默认0(所有日志) seaslog.trace_error = 1 ;自动记录错误 默认1(开启) seaslog.trace_exception = 0 ;自动记录异常信息 默认0(关闭) seaslog.default_datetime_format = "Y:m:d H:i:s" ;日期格式配置 默认"Y:m:d H:i:s" seaslog.appender = 1 ;日志存储介质 1File 2TCP 3UDP (默认为1) seaslog.remote_host = 127.0.0.1 ;接收ip 默认127.0.0.1 (当使用TCP或UDP时必填) seaslog.remote_port = 514 ;接收端口 默认514 (当使用TCP或UDP时必填)
去写代码
SeasLog::setBasePath('/tmp/seaslog/code.zhangxingju.com'); $basePath_1=SeasLog::getBasePath(); echo '当前的日志的路径设置为:'.$basePath_1.'
'; SeasLog::setLogger('seaslog/test'); $lastLogger_1 = SeasLog::getLastLogger(); echo '当前logger目录设置为:'.$lastLogger_1; SeasLog::info('this is a first info log');
访问页面,然后去看日志 成功
[root@localhost tmp]# cd /tmp/seaslog/ [root@localhost seaslog]# ls code.zhangxingju.com default [root@localhost seaslog]# cd code.zhangxingju.com/ [root@localhost code.zhangxingju.com]# ls seaslog [root@localhost code.zhangxingju.com]# cd seaslog [root@localhost seaslog]# ls test [root@localhost seaslog]# cd test [root@localhost test]# ls info.20160915.log [root@localhost test]# cat info.20160915.log info | 33421 | 1473941737.538 | 2016:09:15 20:15:37 | this is a first info log
查看日志的代码
$detailErrorArray_inAll = SeasLog::analyzerDetail('info'); $detailErrorArray_today = SeasLog::analyzerDetail('info',date('Ymd',time())); var_dump($detailErrorArray_inAll,$detailErrorArray_today);
结果:
array(1) { [0]=> string(79) "info | 33421 | 1473941737.538 | 2016:09:15 20:15:37 | this is a first info log " } array(1) { [0]=> string(79) "info | 33421 | 1473941737.538 | 2016:09:15 20:15:37 | this is a first info log " }
测试了,不会立即查询到刚插入的,估计因为脚本执行完才把日志从内存输入的缘故,用实际项目的时候根据需求重新封装下更灵活,要不编辑器都不提示,看着也不爽。
封装了了我想用到的简单的存日志功能,查看日志就直接看文件了
创建类Slog
/** * Created by zhangxingju.com. * User: aju * Date: 2016/9/15 0015 * Time: 20:34 * 封装的seaslog日志的简单存日志的类 */ class SLog { private $BasePath = "/tmp/seaslog/code.zhangxingju.com"; //项目里直接写死基本路径 private $setLogger = 'seaslogtest'; //先设置了默认的日志路径 private $elements = array(); //存入的元素 /** * 保存日志 * @param string $path */ public function info($path = '') { SeasLog::setBasePath($this->BasePath); if (empty($path)) { SeasLog::setLogger($this->setLogger); } else { SeasLog::setLogger($path); } SeasLog::log('info', json_encode($this->elements)); } /** * 增加存入的内容 * @param $element * @return bool */ public function add($element) { return (array_push($this->elements, $element)) ? true : false; } }
使用
require_once 'SLog.php'; $Slog=new SLog(); //many code $Slog->add('username is zhangxingju'); //many code $Slog->add('password is 123'); //many code $Slog->add('ip is 192.168.1.101'); //many code $Slog->info('访问测试');
结果
[root@localhost code.zhangxingju.com]# ls seaslog 访问测试 [root@localhost code.zhangxingju.com]# cd 访问测试/ [root@localhost 访问测试]# ls info.20160915.log [root@localhost 访问测试]# cat info.20160915.log info | 33422 | 1473945700.898 | 2016:09:15 21:21:40 | ["username is zhangxingju","password is 123","ip is 192.168.1.101"]