ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
>[info]高性能的php日志系统 --seaslog,学习使用之前我们首先要搞明白,日志能给我们解决什么问题 - 自己搭建web日志系统,可以看项目中是咋弄的 - 什么是日志系统?? 1、记录系统运行时的信息 2、记录日志、应用程序、安全日志 3、日志功能不应该影响到用户的正常使用 - 为什么需要日志系统?? 1、了解系统运行情况 2、记录用户操作信息 3、收集数据(如 500错误,出现了多少次) - 为什么选择seaslog?? 1、高性能(C语言写的) 2、无需配置(先写闪存,达到一定量才写到文件里) 3、功能完善使用简单 - 实际项目中使用seaslog的场景?? 1、记录有人来了 2、记录用户看没看到,看到后记录看到哪些 ... [toc] ## :-: **Win安装** >[info] 下载扩展地址:https://pecl.php.net/package/SeasLog/1.6.9/windows - 根据PHP版本 是否线程安全 进行选择 这些都可以在phpinfo里查得到 - 下载之后 把里面的php_seaslog.dll拷贝到PHP的安装目录下的ext里 - 然后打开php.ini进行配置 extension=php_seaslog.dll ## :-: **linux的安装** >[warning]他是php的一个扩展,不是普通类库 >[info]http://pecl.php.net/ 安装php扩展来这个网站找包,或直接访问:https://pecl.php.net/package/seaslog ![](https://box.kancloud.cn/8d4e6c1a12382410df5b117772b0095a_1031x123.png) ![](https://box.kancloud.cn/0242b612aef8614e89cdbc32d49fa441_619x71.png) 1、解压,切换进去 2、输入phpize 3、./configure --with-php-config=<span style="color:blue;">/www/server/php/54/bin/php-config</span> (你php-config所在的绝对路径) 4、make && make install ![](https://box.kancloud.cn/709ef89e77a00b4513fc70855e21b5b7_622x62.png) 5、修改php.ini,最后一行加入<span style="color:blue;">extension=seaslog.so</span> ![](https://box.kancloud.cn/0870075bb6003503fa9c6d318a3bed60_575x196.png) >[warning]打印phpinfo()在浏览器查看是安装成功了,但是在linux上执行php -m 没有,我暂时也不知道是为什么,希望知道的大佬给我留言补充下 6、配置 seaslog ~~~ 配置详解:http://php.net/manual/en/seaslog.configuration.php seaslog.default_basepath = /home/wwwlogs/seaslog #默认log根目录 记着 是目录 seaslog.default_logger = default #默认日志目录 位于default_basepath目录下的小目录 seaslog.disting_type = 1 #是否以type分文件 1是 0否(默认) 若是 则每种级别都会单独生成日志文件 seaslog.disting_by_hour = 0 #是否每小时划分一个文件 1是 0否(默认) 若是 则每个小时都会生成新文件 seaslog.use_buffer = 1 #是否启用buffer 1是 0否(默认) 默认关闭,当开启此项时,日志预存于内存,当请求结束时(或异常退出时)一次写入文件。 seaslog.buffer_size = 100 #buffer中缓冲数量 默认0(不使用) seaslog.level = 0 #记录日志级别 默认0(所有日志) seaslog.trace_error = 1 seaslog.trace_exception = 0 seaslog.default_datetime_format = "Y:m:d H:i:s ~~~ 第二条配置seaslog.default_logger我选择在项目的入口文件中再指定Seaslog::setLogger('...') 这样就可以每个项目一个日志目录了 7、SeasLog 日志8个级别 debug -> info -> notice -> warning -> error -> critical -> alert -> emergency ## :-: **常用方法** ![](https://box.kancloud.cn/9d448c800b69bb53c1828baa55efc9b6_502x134.png) - 这些方法都是静态方法,可以直接调用。测试时拿浏览器访问,或php -f 要执行的php文件 ``` php basepath:存日志的路径 设置:Seaslog::setBasePath('/log/base_test'); 获取:Seaslog::getBasePath(); ``` ``` php logger:同模块存到不同路径下 设置:Seaslog::setLogger('app'); 获取:Seaslog::getLastLogger(); SeasLog::setLogger('ms/normaltest'); //示例 ``` ``` php 写日志: Seaslog::debug('...') Seaslog::info('...') SeasLog::info('计费接口结果:' . json_encode($bossResult,JSON_UNESCAPED_UNICODE)); ``` ``` php Seaslog::notice('...') 八个级别都可以记录 日志内容格式为:级别-pid-时间戳-格式化时间-日志内容 ``` ``` php 读取日志条数 Seaslog::analyzerCount('{日志级别}');//如果不填参数 则代表统计全部级别 Seaslog::analyzerCount('{日志级别}','20170914');指定统计某一天的日志 ``` ``` php 读取日志 Seaslog::analyzerDetail('{日志级别}','20170914');//也有两个参数 日志级别和指定时间 第一个日志级别参数必填 时间可选 ``` ``` php 输出info级别的日志: echo "<pre>"; print_r(Seaslog::analyzerDetail('info')); echo "</pre>"; analyzerCount:日志统计 ``` ## :-: **在框架中使用** - 某些PHP框架默认为当前控制器命名空间 所以会报Seaslog not found 只需在前面指定根命名空间就OK: \Seaslog::debug('...') - 第1种:安装php扩展(win装win的,linux装linux的),直接调函数 - 第2种:将该类库从github上,使用composer或其他手法加载到框架中 然后就和使用普通类库一样 思路1、在控制器 直接调用 思路2、改log的配置文件 ![](https://box.kancloud.cn/06ad98daa0b9be66f1e1aeb274d17844_497x100.png) 然后自己封装(和思路1一样,也是在控制器或模型的方法中直接调用) ![](https://box.kancloud.cn/03469f9b779ba8ed06772a013fc84000_764x284.png)