zoukankan      html  css  js  c++  java
  • SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤

    SeasLog 是用 C 语言编写的 PHP 扩展库,功能强大而且性能极高 monolog 比这个差远了。

    普通的日志组件

    假设一个接口里,里写了 5 次记录日志,

    对于 monolog 而言是 5 次写磁盘操作,也就是 5 次 IO,

    在高并发场下,日志写入到磁盘中,

    机器的磁盘 IO , 网络 IO, 内存操作 都会对 CPU 的负载造成压力.

    频繁的刷磁盘,CPU 会因为日志写入导致占用率过高,
    因为接口本身的逻辑 1. 读写 Mysql 2. 读写 Redis 3. 队列任务
    本身就已经有了不少的网络 IO 和磁盘 IO 操作了.

    那,seasLog 是怎么做的呢?
    具体如下
    你可以在配置文件中自定义 每 N 次 日志数据写入到磁盘一次
    在写入磁盘之前先存储在 buffer 中,也就是内存中
    对于上面的场景 相当于 5 次磁盘 IO 变成了一次磁盘 IO

    1. 高并发下日志不会成为性能瓶颈 秒 QPS 8000

    2. 自带日志分析预警框架 (默认关闭)(主要用来分析 Error 日志)
    A: 统计某种日志级别的数量
    B: 查看某种日志级别的所有日志 C: 通过邮件方式发出日志报警

    3. 支持每 log N 次后,日志数据写入磁盘 (日志缓冲区)

    4. 支持 RequestId 请求全局 id 区分请求

    5. 支持按照时间切割日志

    我是 seaslog 的受益者,

    使用这个组件后,解决了我司的日志对 CPU 占用问题.

    还有链路追踪问题,得益于 (全局的 RequestId)

    这个好东西,分享给你. 

    亲测安装步骤:

    1.下载安装包:

    sudo wget https://pecl.php.net/get/SeasLog-2.2.0.tgz

    解压

    sudo tar xzvf SeasLog-2.2.0.tgz 

    2.运行phpize,生成configure 编译文件

    3 . 配置

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

    4.编译并安装

    sudo make && make install

    扩展存放在 /usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/  目录下

    5.在php.ini 文件中添加seaslog 扩展

    extension=seaslog.so
    
    [SeasLog]
    seaslog.default_basepath ="/tmp"
    seaslog.default_logger = "default"
    seaslog.disting_type = 1
    seaslog.disting_by_hour = 1
    seaslog.use_buffer = 1
    seaslog.buffer_size = 100
    seaslog.level = 8
    seaslog.trace_error = 1
    seaslog.trace_exception = 0

    6.重启PHP

     sudo service php-fpm reload

    7.运行结果

    <?php
    
    SeasLog::setBasePath('/home/wwwlogs/seaslog');
    //echo SeasLog::getBasePath();
    
    SeasLog::setLogger('api');
    echo SeasLog::getBasePath();
    echo '<br>'.SeasLog::getLastLogger();
    
    SeasLog::debug('test');
    SeasLog::debug('this is a debug');
    SeasLog::info('this is a info');
    SeasLog::notice('this is a notice');
    SeasLog::emergency('this is a emergency');
    
    $data=SeasLog::analyzerCount();
    echo '<pre>';
    print_r($data);
    echo '<pre>';
    
    SeasLog::flushBuffer();
    //SeasLog::log('info','this is info test');
    
    echo phpinfo();

    常见问题:

    1.seaslog.level = 8 记录所有日志类型 ,慕课网中给出的seaslog.level = 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

    seaslog.level = 8 Default logger level.The Default value was 8, it’s meaning SeasLog will record all of the level.  默认记录器水平仪默认值是8,这意味着SeasLog将记录所有级别。

    seaslog.level = 0 SeasLog will record which level EMERGENCY.

    seaslog.level = 1 SeasLog will record which level EMERGENCY,ALERT.

    seaslog.level = 2 SeasLog will record which level EMERGENCY,ALERT,CRITICAL.

    seaslog.level = 3 SeasLog will record which level EMERGENCY,ALERT,CRITICAL,ERROR.

    seaslog.level = 4 SeasLog will record which level EMERGENCY,ALERT,CRITICAL,ERROR,WARNING.

    seaslog.level = 5 SeasLog will record which level EMERGENCY,ALERT,CRITICAL,ERROR,WARNING,NOTICE.

    seaslog.level = 6 SeasLog will record which level EMERGENCY,ALERT,CRITICAL,ERROR,WARNING,NOTICE,INFO.

    seaslog.level = 7 SeasLog will record which level EMERGENCY,ALERT,CRITICAL,ERROR,WARNING,NOTICE,INFO,DEBUG.

    2.4.2日志模板说明

    模板默认为:seaslog.default_template = "%T | %L | %P | %Q | %t | %M"

    默认的格式为{dateTime} | {level} | {pid} | {uniqid} | {timeStamp} | {logInfo}

    真实案例:2020-05-09 10:31:58 | DEBUG | 10012 | 5eb6161dd598e | 1588991518.904 | debug日志

    如果自定义模板为:seaslog.default_template = "[%T]:%L %P %Q %t %M"

    自定义日志格式为:[{dateTime}]:{level} {pid} {uniqid} {timeStamp} {logInfo}

    真实案例:[2020-05-09 10:31:58] :{DEBUG} {10012} {5eb6161dd598e} {1588991518.904}{debug日志}

    PS:%L 必须在%M之前,就是说日志级别在日志内容之前。

    3.seaslog的常用方法

    配置方法:setBasePath,getBasePath,setLogger,getLastLogger

    写日志方法:log,info,notice,debug,warning,error

    读日志方法:analyzerCount,analyzerDetail

    3.1 常量列表

    SeasLog 共将日志分成8个级别

    级别

    简写

    备注

    SEASLOG_DEBUG

    DEBUG

    debug信息、细粒度信息事件

    SEASLOG_INFO

    INFO

    重要事件、强调应用程序的运行过程

    SEASLOG_NOTICE

    NOTICE

    一般重要性事件、执行过程中较INFO级别更为重要的信息

    SEASLOG_WARNING

    WARNING

    出现了非错误性的异常信息、潜在异常信息、需要关注并且需要修复

    SEASLOG_ERROR

    ERROR

    运行时出现的错误、不必要立即进行修复、不影响整个逻辑的运行、需要记录并做检测

    SEASLOG_CRITICAL

    CRITICAL

    紧急情况、需要立刻进行修复、程序组件不可用

    SEASLOG_ALERT

    ALERT

    必级立即采取行动的紧急事件、需要立即通知相关人员紧急修复

    SEASLOG_EMERGENCY

    EMERGENCY

    系统不可用

    3.2:SeasLog的性能究竟怎么样

    A:

    当SeasLog不开启buffer时,SeasLog是:syslog()函数的8.6倍、file_put_contents()函数的240倍、fwrite()单例情况下的36倍、fwrite()非单例情况下的211倍、monolog不开启buffer时的41倍;当SeasLog开启buffer且buffer_size为100时,SeasLog是:syslog()函数的250倍、file_put_contents()函数的6962倍、fwrite()单例情况下的1052倍、fwrite()非单例情况下的6127倍、monolog开启buffer且buffer size为100时的118倍。

    官方文档:https://github.com/Neeke/SeasLog/blob/master/README_zh.md

    https://my.oschina.net/mtdg/blog/4273817

    赞赏码

    非学,无以致疑;非问,无以广识

  • 相关阅读:
    访问修饰符的权限。
    字符编码
    3/11 作业
    3/10 作业
    作业 3/9
    流程控制之for循环
    Exception in createBlockOutputStream
    windows上传文件到 linux的hdfs
    win10 配置 hadoop-2.7.2
    hadoop 源码编译
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452590.html
Copyright © 2011-2022 走看看