zoukankan      html  css  js  c++  java
  • 使用SeasLog打造高性能日志系统

    什么是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视频教程

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

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

    apt-get install php5-dev
    phpize

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

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

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

    编译并安装

    make && make install

    在php.ini中配置SeasLog

    ;seaslog
    extension = "seaslog.so"
    easlog.default_basepath = /var/log/
    seaslog.default_logger = default
    seaslog.disting_type = 1
    seaslog.disting_by_hour = 1
    seaslog.use_buffer = 1
    seaslog.buffer_size = 100
    seaslog.level = 0
    seaslog.trace_error = 1
    seaslog.trace_exception = 0
    seaslog.default_datetime_format = "%Y:%m:%d %H:%M:%S"

    重启apache服务器

    service apache2 restart

    SeasLog中的常量

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

    SEASLOG_DEBUG "debug"
    SEASLOG_INFO "info"
    SEASLOG_NOTICE "notice"
    SEASLOG_WARNING "warning"
    SEASLOG_ERROR "error"
    SEASLOG_CRITICAL "critical"
    SEASLOG_ALERT "alert"
    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);

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

    SeasLog::debug(Message);
    SeasLog::info(Message);
    SeasLog::notice(Message);
    SeasLog::warning(Message);
    SeasLog::error(Message);
    SeasLog::critical(Message);
    SeasLog::alert(Message);
    SeasLog::emergency(Message);

    快速统计日志

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

    $count = SeasLog::analyzerCount();
    var_dump($count);
    /*
    array(8) {
      ["debug"]=>
      int(3)
      ["info"]=>
      int(3)
      ["notice"]=>
      int(3)
      ["warning"]=>
      int(3)
      ["error"]=>
      int(6)
      ["critical"]=>
      int(3)
      ["alert"]=>
      int(3)
      ["emergency"]=>
      int(3)
    }
    */

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

    $count = SeasLog::analyzerCount(SEASLOG_WARNING);
    var_dump($count);
    // int(7)

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

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

    返回日志列表

    返回指定级别的日志列表

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

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

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

    759a6d0eb23351895fe69a89cc0757dd.png

  • 相关阅读:
    delphi 开发扩展(二)
    ubuntu 下的两个项目管理工具
    jquery 图片轮询
    SSL on Ubuntu 8.10 Apache2
    netbeans 字体美化
    用IDHTTP 实现上传和返回XML
    windows7 安装 virtualbox和 ubuntu
    线程加载返回的XMLtoTClientDataSet
    双buffer与单buffer
    西西吹雪:从程序员到项目经理(一)
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15847681.html
Copyright © 2011-2022 走看看