SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]

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)

这个好东西,分享给你. 

SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]

 

SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]

 

亲测安装步骤:

1.下载安装包:

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

SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]

解压

sudo tar xzvf SeasLog-2.2.0.tgz 

 

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

SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]

3 . 配置

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

SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]

4.编译并安装

sudo make && make install

SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]

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

SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]

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();

SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]SeasLog 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]

常见问题:

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 与 monolog 日志系统的区别,SeasLog安装步骤[通俗易懂]

当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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111564.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • NP-Hard问题浅谈

    NP-Hard问题浅谈看相关算法的paper的时候,经常会出现NP-Hard这个词。本博主也不是纯数学系出身,对于这么高深的问题自然没有特别深入独到的理解。但是本博主的习惯就是看到一个东西老在眼前晃来晃去但自己还不是很明白,就有强迫症一定要搞明白这到底是个什么玩意。so,咱们就来看看这个NP-Hard问题,怎么用最简单的方式去了解。1.世界七大数学难题之首2000年,美国克莱数学研究所公布了世界七大数学难题,又称千禧年大

  • Ubuntu更改镜像源两种方式

    Ubuntu更改镜像源两种方式所谓的镜像源:可以理解为提供下载软件的地方因为使用apt-get命令默认是从国外的服务器下载安装软件的,会导致下载安装速度很慢,所以需要更改成国内的镜像源服务器。一、可视化方式更改镜像源1.打开“软件和更新”设备Ubuntu将“软件和更新”从“设置”中独立出来了2.选择“Ubuntu软件/其它站点/选择最佳服务器”,自动选择最佳服务器,3.重新载入可用软件列表,完成更新二、手动修改镜像源如:将镜像源改成清华大学TUNA镜像源:https.

  • python google auth totp_Google Authenticator TOTP原理详解(以Python为例)「建议收藏」

    python google auth totp_Google Authenticator TOTP原理详解(以Python为例)「建议收藏」如果有疑问,请点击此处,然后发表评论交流,作者会及时回复(也可以直接在当前文章评论)。——-谢谢您的参考,如有疑问,欢迎交流一、原理详解(图片可以点击然后放大查看)二、验证1、下载Google谷歌身份验证器。2、通过Python的qrcode和pyotp模块生成二维码。3、然后使用下载的谷歌身份验证器扫描生成的二维码如果没有谷歌服务,则选择输入秘钥,在账户明处填入name参数,在秘…

    2022年10月29日
  • 复习一周,京东+百度一面,不小心都拿了Offer

    复习一周,京东+百度一面,不小心都拿了Offer京东和百度一面都问了啥,面试官百般刁难,可惜我全会。

  • UML时序图总结

    UML时序图总结序列图主要用于展示对象之间交互的顺序。  序列图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。  消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。   序列图中涉及的元素:  1. 生命线:

  • 前端如何实现整套视频直播技术流程

    前端如何实现整套视频直播技术流程目录大纲:直播技术的简单介绍 前端搭建使用的技术 实践效果 后续需要深入的地方简介:首先说明,本篇文章是概念+实践,对于希望了解和实践一个简单的摄像头直播网页功能的人会有帮助,由于篇幅和实践深入度有限,目前demo效果只支持直播播放电脑端以及常用摄像头的实时视频流,其他复杂的功能(例如视频信息实时处理,高并发,网络分发等)尚未实现,还需要进一步探索。正文:下面按照目录大纲来…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号