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"]