使用SeasLog打造高性能日志系统

举报
lxw1844912514 发表于 2022/03/26 23:16:59 2022/03/26
【摘要】 什么是SeasLog SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便、规范、高效地写日志,以及快速地读取和查询日志。 为什么使用SeasLog 高性能SeasLog使用C语言编写,并带有缓冲池的功能。每次写入的日志,是先写入到内存当中,当达到一定的数量时,才写入到文件当中。配置简单...

什么是SeasLog

SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便、规范、高效地写日志,以及快速地读取和查询日志。

为什么使用SeasLog

  1. 高性能

    SeasLog使用C语言编写,并带有缓冲池的功能。每次写入的日志,是先写入到内存当中,当达到一定的数量时,才写入到文件当中。

  2. 配置简单

    SeasLog的配置十分简单,甚至不需要配置就可以直接使用。

  3. 功能完善,使用简单

支持日志级别

支持日志分模块存放

支持日志统计,分析

在Ubuntu下安装配置SeasLog

先使用以下命令下载最新版本的SeasLog,当前官方的版本为1.5.6,具体的版本和下载地址可以查看以下网址

http://pecl.php.net/package/SeasLog php官方

https://github.com/Neeke/SeasLog 作者的github

http://www.imooc.com/view/591 SeasLog视频教程


   
  1. // 下载最新版本的SeasLog
  2. wget pecl.php.net/get/SeasLog-1.5.6.tgz
  3. // 解压下载得到的压缩包SeasLog-1.5.6.tgz
  4. tar -zxvf SeasLog-1.5.6.tgz

使用php自带的安装方法,Ubuntu下需要先安装 php5-dev 的包


   
  1. apt-get install php5-dev
  2. phpize

使用了phpize命令之后,当前解压的路径下回多出一个configure的文件.

后面修改为自己的php-config路径

./configure --with-php-config=/usr/bin/php-config
  

编译并安装

make && make install
  

在php.ini中配置SeasLog


   
  1. ;seaslog
  2. extension = "seaslog.so"
  3. easlog.default_basepath = /var/log/
  4. seaslog.default_logger = default
  5. seaslog.disting_type = 1
  6. seaslog.disting_by_hour = 1
  7. seaslog.use_buffer = 1
  8. seaslog.buffer_size = 100
  9. seaslog.level = 0
  10. seaslog.trace_error = 1
  11. seaslog.trace_exception = 0
  12. seaslog.default_datetime_format = "%Y:%m:%d %H:%M:%S"

重启apache服务器

service apache2 restart
  

SeasLog中的常量

SeasLog将日志分为了8个级别,其中我们可以使用如下常量,代表各级别。


   
  1. SEASLOG_DEBUG "debug"
  2. SEASLOG_INFO "info"
  3. SEASLOG_NOTICE "notice"
  4. SEASLOG_WARNING "warning"
  5. SEASLOG_ERROR "error"
  6. SEASLOG_CRITICAL "critical"
  7. SEASLOG_ALERT "alert"
  8. SEASLOG_EMERGENCY "emergency"

在项目中使用SeasLog

设置存放路径

在开始使用SeasLog写入日志之前,我们需要先设置日志的存放路径,如果没有设置路径的话,SeasLog会默认将这个日志写入到php.ini配置中默认指定的路径下

SeasLog::setBasePath('/log/base_test');
  

可以使用以下方法,获取当前的存放路径。

SeasLog::getBasePath();
  

设置日志的模块

和设置路径的使用方法一样,设置模块调用如下命令

SeasLog::setLogger('testModule/app1');
  

获取模块

SeasLog::getLastLogger()
  

快速写入日志

上面已经设置过了basePath与logger,于是log记录的目录已经产生了

log记录目录 = basePath / logger / {fileName}.log log文件名,以 年月日 分文件,如今天是2021年12月18日期,那么 {fileName} = 20211218;

调用以下方法可以快速写入一个日志,Level参数为日志的等级,Message为日志的信息

日志的等级我们可以传入上面介绍过的常量,也可以传入等级的名称,比如说INFO,ERROR等,建议使用常量

SeasLog::log(Level, Message);
  

写入指定等级的日志信息,可以使用以下的方法


   
  1. SeasLog::debug(Message);
  2. SeasLog::info(Message);
  3. SeasLog::notice(Message);
  4. SeasLog::warning(Message);
  5. SeasLog::error(Message);
  6. SeasLog::critical(Message);
  7. SeasLog::alert(Message);
  8. SeasLog::emergency(Message);

快速统计日志

使用下面这个方法,可以将各级别的所有日志信息汇总后,返回一个数组


   
  1. $count = SeasLog::analyzerCount();
  2. var_dump($count);
  3. /*
  4. array(8) {
  5.   ["debug"]=>
  6.   int(3)
  7.   ["info"]=>
  8.   int(3)
  9.   ["notice"]=>
  10.   int(3)
  11.   ["warning"]=>
  12.   int(3)
  13.   ["error"]=>
  14.   int(6)
  15.   ["critical"]=>
  16.   int(3)
  17.   ["alert"]=>
  18.   int(3)
  19.   ["emergency"]=>
  20.   int(3)
  21. }
  22. */

返回指定级别的日志信息数量


   
  1. $count = SeasLog::analyzerCount(SEASLOG_WARNING);
  2. var_dump($count);
  3. // int(7)

返回当天的指定级别的日志信息数量


   
  1. $count = SeasLog::analyzerCount(SEASLOG_ERROR,date('Ymd',time()));
  2. var_dump($count);
  3. // int(1)

返回日志列表

返回指定级别的日志列表


   
  1. SeasLog::analyzerDetail(SEASLOG_ERROR);
  2. /*
  3. array(6) {
  4.  [0] =>
  5.   string(66) "error | 8568 | 1393172042.717 | 2021:02:24 00:14:02 | test error 3 "
  6.   [1] =>
  7.   string(66) "error | 8594 | 1393172044.104 | 2021:02:24 00:14:04 | test error 3 "
  8.   [2] =>
  9.   string(66) "error | 8620 | 1393172044.862 | 2021:02:24 00:14:04 | test error 3 "
  10.   [3] =>
  11.   string(66) "error | 8646 | 1393172045.989 | 2021:02:24 00:14:05 | test error 3 "
  12.   [4] =>
  13.   string(66) "error | 8672 | 1393172047.882 | 2021:02:24 00:14:07 | test error 3 "
  14.   [5] =>
  15.   string(66) "error | 8698 | 1393172048.736 | 2021:02:24 00:14:08 | test error 3 "
  16. }
  17. */

返回指定级别当天的日志列表

SeasLog::analyzerDetail(SEASLOG_ERROR,date('Ymd',time()));
  

759a6d0eb23351895fe69a89cc0757dd.png

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/122531995

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。