在PHP项目中方便、规范、高效地写日志,允许用

选用SeasLog创设PHP项目中的高质量日志组件(1)

什么是SeasLog

SeasLog是二个C语言编写的PHP扩张,提供一组正式标准的作用函数,在PHP项目中有益、标准、高效地写日记,以及快速地读取和查询日志。

何以选拔SeasLog

不管在哪些应用中,log日志都以架设中不可缺点和失误的四个首要组成都部队分,它一般是系统或软件、应用的周转记录。通过log的剖释,能够平价客商领会系统或软件、应用的周转意况;要是您的应用log丰盛丰硕,也足以解析过去顾客的操作行为、类型喜好、地域分布或别的越来越多新闻;要是一个利用的log同不时间也分了四个等级,那么能够很随意地解析获得该使用的健康境况,及时开掘难点并火速牢固、化解难点,补救损失。

作者们精晓,php内置了非常的多log函数,如error_log、syslog、file_put_content,这一个函数功用庞大且质量极好,但出于种种缺点(error_log、file_put_content无不当等级、无固定格式疑似信马由缰随地乱画;syslog不区分模块、况兼与系统日志混合,读syslog记录会令人抓狂的。),灵活度减弱了重重,很无法满意使用供给。基本上全体的开拓者,都会自行设计封装log库,当然也可能有成都百货上千开辟者选择已有的开源日志库。

也许有过多开源log类库弥补了上述缺欠,如log4php、plog、Analog等(当然也可能有为数十分多施用在类型中协调付出的log类)。当中以log4php最为盛名,它的宏图特出、格式完美、文书档案完善、功用强大。不过通过测验,log4php的属性相当差。

图片 1

那是log4php与SeasLog的习性比较图:

规划思路

那正是说有未有一种log类库同期知足以下须要呢:

●分模块、分级别

●配置轻易(最佳是勿须配备)

●日志格式清晰易读

●应用轻巧、品质很棒

咱俩精晓,PSENCORE-3标准是三个国际化的日志规范,它要求了“模块、等第、清晰、易用”等日志专门的职业应有所的特点。由此,只要我们依照了PS奥德赛-3标准,则大家得以做到“分模块、分等级”以及“日志格式清晰易读”的渴求。

“配置简单”这一个须要也很好成功。假如严俊根据既定准绳,其实只须求安装默许目录就足以了。

OK,未来我们只剩余“质量”这一个渴求。

既然如此是日记,免不了会写文件,可能通过pipe通过网络传递到有个别存款和储蓄中央(大家暂不思考存款和储蓄宗旨的宏图)。能够推测,若是多少个乞求中需求写出1000处log,那么势必会有1000次IO,那对品质将是二个不小的贻误点。一般对于拍卖这种频频同样的伏乞场景,大家要消除的骨子里也很简短,使用cache或buffer,把数13次须求作归并,进而裁减对磁盘或网络的IO,那是三个基本的沉思。

SeasLog也是那样做的。设定三个buffer_size(私下认可100条log),使用PHP诉求内部存款和储蓄器,每写一回log,塞入内部存款和储蓄器,同一时候buffer_size加;当buffer_size等于设置值时,则展开三遍IO,同一时候免去buffer; 当然,假如央求甘休了、或施行了die、exit或其余非常退出时,不管buffer_size有未有攒够设置值,立即张开一回IO,同期免去buffer。

到近些日子甘休,SeasLog的正式版本为1.1.6,选取Apache 2.0开源契约,同有时间能够在php.net官方,和Github库上获得它的完好代码。

Php.net

Github

眼前提供了怎么着

●在PHP项目中便捷、规范地记录log

●可布署的暗中同意log目录与模块

●内定log目录与收获当前配备

●先河的剖释预先警告框架

●高效的日志缓冲、便捷的缓冲debug

●遵从 PS奥迪Q3-3 日志接口标准

怎么设置

赢得源码后,可活动编写翻译。

$ /path/to/phpize

$ ./configure --with-php-config=/path/to/php-config 

$ make && make install

自然,使用PECL管理工科具会更便利: 

$ pecl install seaslog

seaslog.ini的配置

; configuration for php SeasLog module extension = seaslog.so seaslog.default_basepath = /log/seaslog-test    ;默认log根目录 seaslog.default_logger = default                ;默认logger目录 seaslog.disting_type = 1                            ;是否以type分文件 1是 0否(默认) seaslog.disting_by_hour = 1                      ;是否每小时划分一个文件 1是 0否(默认) seaslog.use_buffer = 1                              ;是否启用buffer 1是 0否(默认) seaslog.buffer_size = 100                         ;buffer中缓冲数量 默认0(不使用buffer_size) seaslog.level = 0                                       ;记录日志级别 默认0(所有日志) 

seaslog.disting_type = 1 开启以type分文件,即log文件分别infowarnerro

seaslog.disting_by_hour = 1 展开每时辰划分叁个文书

seaslog.use_buffer = 1 展开buffer。暗许关闭。当张开此项时,日志预存于内部存款和储蓄器,当呼吁结束时(或特别退出时)一次写入文件。

seaslog.buffer_size = 100 设置缓冲数量为100. 默感到0,即无缓冲数量限制.当buffer_size大于0时,缓冲量达到该值则写一遍文件. 

seaslog.level = 3 记录的日志等级.默以为0,即怀有日志均记录。当level为1时,关切debug以上等第(包罗debug),就那样类推。level大于8时,全体日志均不记录。


图片 2


) 什么是SeasLog SeasLog是七个C语言编写的PHP扩张,提供一组正式标准的职能函数,在PHP项目中方便...

SeasLog
Yet a log extension for PHP.A effective,fast,stable log extension for PHP
@author Chitao.Gao [neeke@php.net]

安装

# 并发总的数量是 work_processes 和 worker_connections 的乘积;
# max_clients = work_process * worker_connections
# 若设置了反向代理;
# max_clients = work_process * worker_connections / 4
# work_connections 值的安装跟物理内部存款和储蓄器大小有关;
}

Linux部分:

下载地址

将包用ftp传到Linux上 然后移走
mv SeasLog-1.6.9.tgz /usr/local/SeasLog.tgz

 

走入目录解压
cd /usr/local
tar -zxvf SeasLog.tgz

 

 

进行PHP安装目录下的phpize
/usr/local/php7/bin/phpize

 

搜索php-config路径
find /usr/local/php7/ -name php-config
得到/usr/local/php7/bin/php-config

 

配置
./configure --with-php-config=/usr/local/php7/bin/php-config

 

编译
make

 

安装
make install

出现Installing shared extensions: /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/
则成功

 

伸开php.ini实行铺排
找到一排extension的地方加上extension=seaslog.so

 

 

 

程序猿必上的开拓者服务平台 —— DevStore

敏捷计算某项目log的count值

SeasLog在扩张中接纳管道调用shell命令 grep -wc火速地得到count值,并再次来到值(array || int)给PHP。

$countResult_1 = SeasLog::analyzerCount();
$countResult_2 = SeasLog::analyzerCount(SEASLOG_WARNING);
$countResult_3 = SeasLog::analyzerCount(SEASLOG_ERROR,date('Ymd',time()));

var_dump($countResult_1,$countResult_2,$countResult_3);
/*
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)
}
int(7)
int(1)
*/

# 法斯特CGI相关参数是为了精雕细刻网址的属性;
# 收缩财富占用,提升访谈速度;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;

 

怎么使用SeasLog

log日志,平常是系统或软件、应用的周转记录。通过log的剖释,能够一本万利顾客领悟系统或软件、应用的周转景况;假设你的施用log充足丰盛,也得以解析过去顾客的操作行为、类型喜好、地域布满或别的越多音讯;假诺贰个用到的log同有时候也分了七个等第,那么能够很随便地剖析获得该利用的健康情状,及时发掘难题并赶快稳定、消除难题,补救损失。

php内置error_log、syslog函数效率庞大且质量极好,但鉴于各样短处(error_log无不当级别、无固定格式,syslog不分模块、与系统日志混合),灵活度减弱了累累,无法满足使用要求。

好音讯是,有大多第三方的log类库弥补了上述破绽,如log4php、plog、Analog等(当然也可能有众多接纳在品种中本身开拓的log类)。在那之中以log4php最佳知名,设计美丽、格式完美、文书档案完善、功用强大。推荐。(log4php的品质有待测量试验)

那正是说有未有一种log类库满意以下要求呢:

  • 分模块、分级别

  • 布置简单(最佳是勿须配备)

  • 日志格式清晰易读

  • 利用轻巧、品质很棒

SeasLog 就是应此供给而生。

现阶段提供了怎么

  • 在PHP项目中便捷、标准地记录log

  • 可布署的暗中同意log目录与模块

  • 钦赐log目录与收获当前布署

  • 开班的深入分析预先警告框架

  • 高速的日志缓冲、便捷的缓冲debug

  • 依据 PS陆风X8-3 日志接口规范

急速写入log

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

log记录目录 = basePath / logger / {fileName}.log log文件名,以 年月日 分文件,如前天是二零一四年0十一月二十16日期,那么 {fileName} = 20150218;

还记得 php.ini 中安装的 seaslog.disting_type 吗?
默认的 seaslog.disting_type = 0,要是前几天自身使用了 SeasLog ,那么将时有产生最后的log文件:

  • LogFile = basePath / logger / 20140218.log 如果 seaslog.disting_type = 1,则最后的log文件将是那般的四个公文
  • infoLogFile = basePath / logger / 20140218.INFO.log
  • warnLogFile = basePath / logger / 20140218.WARNING.log
  • erroLogFile = basePath / logger / 20140218.ERROR.log
SeasLog::log(SEASLOG_ERROR,'this is a error test by ::log');

SeasLog::debug('this is a {userName} debug',array('{userName}' => 'neeke'));

SeasLog::info('this is a info log');

SeasLog::notice('this is a notice log');

SeasLog::warning('your {website} was down,please {action} it ASAP!',array('{website}' => 'github.com','{action}' => 'rboot'));

SeasLog::error('a error log');

SeasLog::critical('some thing was critical');

SeasLog::alert('yes this is a {messageName}',array('{messageName}' => 'alertMSG'));

SeasLog::emergency('Just now, the house next door was completely burnt out! {note}',array('{note}' => 'it`s a joke'));

/*
这些函数同时也接受第3个参数为logger的设置项
注意,当last_logger == 'default'时等同于:
SeasLog::setLogger('test/new/path');
SeasLog::error('test error 3');
如果已经在前文使用过SeasLog::setLogger()函数,第3个参数的log只在此处临时使用,不影响下文。
*/

log格式受seaslog.default_template影响。 seaslog.default_template暗许模板为 seaslog.default_template = "%T | %L | %P | %Q | %t | %M" 那么在暗许意况下,日志格式为:
{dateTime} | {level} | {pid} | {uniqid} | {timeStamp} | {logInfo}
至于自定义模板,及SeasLog中的预置值,可仿效
自定义日志模板

2014-07-27 08:53:52 | ERROR | 23625 | 599159975a9ff | 1406422432.786 | this is a error test by log
2014-07-27 08:53:52 | DEBUG | 23625 | 599159975a9ff | 1406422432.786 | this is a neeke debug
2014-07-27 08:53:52 | INFO | 23625 | 599159975a9ff | 1406422432.787 | this is a info log
2014-07-27 08:53:52 | NOTICE | 23625 | 599159975a9ff | 1406422432.787 | this is a notice log
2014-07-27 08:53:52 | WARNING | 23625 | 599159975a9ff | 1406422432.787 | your github.com was down,please rboot it ASAP!
2014-07-27 08:53:52 | ERROR | 23625 | 599159975a9ff | 1406422432.787 | a error log
2014-07-27 08:53:52 | CRITICAL | 23625 | 599159975a9ff | 1406422432.787 | some thing was critical
2014-07-27 08:53:52 | EMERGENCY | 23625 | 599159975a9ff | 1406422432.787 | Just now, the house next door was completely burnt out! it is a joke

 

Windows部分:

依据PHP版本 是还是不是线程安全 进行分选 那个都足以在phpinfo里查获得

 

下载之后 把里面包车型客车php_seaslog.dll拷贝到PHP的设置目录下的ext里

 

下一场打开php.ini举办布局

extension=php_seaslog.dll

 

 

安装

简介

# 设置职业情势为epoll,
# 有select,poll,kqueue,rtsig和/dev/poll模式;
# epoll是多路复用IO(I/O Multiplexing)中的一种艺术;
# 仅用于linux2.6以上基础,能够大大进步nginx的天性;
# use epoll;

集体部分:

在php.ini中 extension下面接着陈设以下新闻:

 

seaslog.default_basepath = 'D:/WWW/log' ;默认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.default_logger小编选取在类型的输入文件中再钦赐Seaslog::setLogger('...')

这样就能够各个品种四个日记目录了

 

SeasLog 日志8个级别
debug -> info -> notice -> warning -> error -> critical -> alert -> emergency

 

保存退出 重启Apache 打个phpinfo()出来找找有未有SeasLog扩张

 

 

以下是PHP中的seaslog函数:

 

basepath
设置:Seaslog::setBasePath('/log/base_test');
获取:Seaslog::getBasePath();

 

logger
设置:Seaslog::setLogger('app');
获取:Seaslog::getLastLogger();

 

写日志:
Seaslog::debug('...')
Seaslog::info('...')
Seaslog::notice('...')
多个品级都能够记录

日志内容格式为:等第-pid-时间戳-格式化时间-日志内容

 

读取日志条数
Seaslog::analyzerCount('{日志等级}');//假设不填参数 则意味着总计全体等第
Seaslog::analyzerCount('{日志品级}','20170914');内定计算某一天的日记

 

读取日志
Seaslog::analyzerDetail('{日志品级}','20170914');//也可能有多个参数 日志等级和指定期间 第三个日志等级参数必填 时间可选

 

 

出口info品级的日记:
echo "<pre>";
print_r(Seaslog::analyzerDetail('info'));
echo "</pre>";

 

某个PHP框架默觉妥善前调节器命名空间 所以会报Seaslog not found
只需在前头钦命根命名空间就OK: Seaslog::debug('...')

 

seaslog.ini的配置

 ; configuration for php SeasLog module
extension = seaslog.so
seaslog.default_basepath = /log/seaslog-test    ;默认log根目录
seaslog.default_logger = default                ;默认logger目录
seaslog.disting_type = 1                        ;是否以type分文件 1是 0否(默认)
seaslog.disting_by_hour = 1                     ;是否每小时划分一个文件 1是 0否(默认)
seaslog.use_buffer = 1                          ;是否启用buffer 1是 0否(默认)

seaslog.disting_type = 1 张开以type分文件,即log文件分别infowarnerro

seaslog.disting_by_hour = 1 敞开每小时划分三个文本

seaslog.use_buffer = 1 翻开buffer。暗许关闭。当展开此项时,日志预存于内部存款和储蓄器,当呼吁结束时(或特别退出时)二遍写入文件。

常量与函数

常量列表

* SEASLOG_DEBUG                       "debug"
* SEASLOG_INFO                        "info"
* SEASLOG_NOTICE                      "notice"
* SEASLOG_WARNING                     "warning"
* SEASLOG_ERROR                       "error"
* SEASLOG_CRITICAL                    "critical"
* SEASLOG_ALERT                       "alert"
* SEASLOG_EMERGENCY                   "emergency"


var_dump(SEASLOG_DEBUG,SEASLOG_INFO,SEASLOG_NOTICE);
/*
string('debug') debug级别
string('info')  info级别
string('notice') notice级别
*/

函数列表

SeasLog 提供了这么一组函数,能够一本万利地赢得与安装根目录、模块目录、飞速写入与总结log。 相信从下述伪代码的表明中,您能够长足获得函数新闻,具体采纳将紧接其后:

<?php
/**
 * @author ciogao@gmail.com
 * Date: 14-1-27 下午4:47
 */


class SeasLog
{
    public function __construct()
    {
        #SeasLog init
    }


    public function __destruct()
    {
        #SeasLog distroy
    }


    /**
     * 设置basePath
     * @param $basePath
     * @return bool
     */
    static public function setBasePath($basePath)
    {
        return TRUE;
    }


    /**
     * 获取basePath
     * @return string
     */
    static public function getBasePath()
    {
        return 'the base_path';
    }


    /**
     * 设置模块目录
     * @param $module
     * @return bool
     */
    static public function setLogger($module)
    {
        return TRUE;
    }


    /**
     * 获取最后一次设置的模块目录
     * @return string
     */
    static public function getLastLogger()
    {
        return 'the lastLogger';
    }


    /**
     * 统计所有类型(或单个类型)行数
     * @param $level
     * @param string $log_path
     * @return array | long
     */
    static public function analyzerCount($level = 'all',$log_path = '*')
    {
        return array();
    }


    /**
     * 以数组形式,快速取出某类型log的各行详情
     * @param $level
     * @param string $log_path
     * @return array
     */
    static public function analyzerDetail($level = SEASLOG_INFO,$log_path = '*')
    {
        return array();
    }


    /**
     * 获得当前日志buffer中的内容
     * @return array
     */
    static public function getBuffer()
    {
        return array();
    }


    /**
     * 记录debug日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function debug($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_DEBUG
    }


    /**
     * 记录info日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function info($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_INFO
    }


    /**
     * 记录notice日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function notice($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_NOTICE
    }


    /**
     * 记录warning日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function warning($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_WARNING
    }


    /**
     * 记录error日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function error($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_ERROR
    }


    /**
     * 记录critical日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function critical($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_CRITICAL
    }


    /**
     * 记录alert日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function alert($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_ALERT
    }


    /**
     * 记录emergency日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function emergency($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_EMERGENCY
    }


    /**
     * 通用日志方法
     * @param $level
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function log($level,$message,array $content = array(),$module = '')
    {


    }
}

SeasLog Logger的选用(详细文书档案)

接纳SeasLog进行常规预先警告

预先警告的安排

[base]
wait_analyz_log_path = /log/base_test


[fork]
;是否开启多线程 1开启 0关闭
fork_open = 1


;线程个数
fork_count = 3


[warning]
email[smtp_host] = smtp.163.com
email[smtp_port] = 25
email[subject_pre] = 预警邮件 -
email[smtp_user] = seaslogdemo@163.com
email[smtp_pwd] = seaslog#demo
email[mail_from] = seaslogdemo@163.com
email[mail_to] = gaochitao@weiboyi.com
email[mail_cc] = ciogao@gmail.com
email[mail_bcc] =


[analyz]
; enum
; SEASLOG_DEBUG      "debug"
; SEASLOG_INFO       "info"
; SEASLOG_NOTICE     "notice"
; SEASLOG_WARNING    "warning"
; SEASLOG_ERROR      "error"
; SEASLOG_CRITICAL   "critical"
; SEASLOG_ALERT      "alert"
; SEASLOG_EMERGENCY  "emergency"


test1[module] = test/bb
test1[level] = SEASLOG_ERROR
test1[bar] = 1
test1[mail_to] = gaochitao@weiboyi.com


test2[module] = 222
test2[level] = SEASLOG_WARNING


test3[module] = 333
test3[level] = SEASLOG_CRITICAL


test4[module] = 444
test4[level] = SEASLOG_EMERGENCY


test5[module] = 555
test5[level] = SEASLOG_DEBUG

crontab配置

;每天凌晨3点执行
0 3 * * * /path/to/php /path/to/SeasLog/Analyzer/SeasLogAnalyzer.php

Demo:

<?php
/**
 * @author ciogao@gmail.com
 * Date: 14-1-27 下午4:41
 */

echo '<pre>';
var_dump(SEASLOG_TYPE_INFO,SEASLOG_TYPE_INFO_STR);
var_dump(SEASLOG_TYPE_WARN,SEASLOG_TYPE_WARN_STR);
var_dump(SEASLOG_TYPE_ERRO,SEASLOG_TYPE_ERRO_STR);


var_dump(seaslog_get_basepath());
var_dump(seaslog_get_lastlogger());
var_dump(seaslog_get_basepath());
var_dump(seaslog('test info'));
var_dump(seaslog('test warning', SEASLOG_TYPE_WARN));
var_dump(seaslog('test error', SEASLOG_TYPE_ERRO));


var_dump(seaslog_set_basepath('/log/base_test'));
var_dump(seaslog_set_logger('testModule/app1'));
var_dump(seaslog('test info 2'));
var_dump(seaslog('test warning 2', SEASLOG_TYPE_WARN));
var_dump(seaslog('test error 2', SEASLOG_TYPE_ERRO));
var_dump(seaslog_get_basepath());
var_dump(seaslog_get_lastlogger());
var_dump(seaslog_get_basepath());

var_dump(seaslog('test error 3', SEASLOG_TYPE_ERRO, 'test/bb'));

var_dump(seaslog_analyzer_count()); // == seaslog_analyzer_count(ALL_TYPE);
var_dump(seaslog_analyzer_count(SEASLOG_TYPE_ERRO)); // == seaslog_analyzer_count(SEASLOG_TYPE_ERRO,'*')
var_dump(seaslog_analyzer_count(SEASLOG_TYPE_ERRO,'20140211.log'));


var_dump(seaslog_analyzer_detail(SEASLOG_TYPE_ERRO)); // == seaslog_analyzer_detail(SEASLOG_TYPE_ERRO,'*')
var_dump(seaslog_analyzer_detail(SEASLOG_TYPE_ERRO,'20140211.log'));


echo "n";
SEASLOG_CRITICAL
  • "CQashqaiITICAL" - 火急情状、需求立时开展修补、程序组件不可用

# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;

编译安装 seaslog

$ /path/to/phpize
$ ./configure --with-php-config=/path/to/php-config
$ make && make install
取得某项目log列表

SeasLog在扩大中央银行使管道调用shell命令 grep -w快捷地获得列表,并赶回array给PHP。

$detailErrorArray_inAll   = SeasLog::analyzerDetail(SEASLOG_ERROR);
$detailErrorArray_today   = SeasLog::analyzerDetail(SEASLOG_ERROR,date('Ymd',time()));

var_dump($detailErrorArray_inAll,$detailErrorArray_today);

/*
SeasLog::analyzerDetail(SEASLOG_ERROR) == SeasLog::analyzerDetail(SEASLOG_ERROR,'*');
取当前模块下所有level为 SEASLOG_ERROR 的信息列表:
array(6) {
 [0] =>
  string(66) "2014-02-24 00:14:02 | ERROR | 8568 | 599157af4e937 | 1393172042.717 | test error 3 "
  [1] =>
  string(66) "2014-02-24 00:14:04 | ERROR | 8594 | 5991576584446 | 1393172044.104 | test error 3 "
  [2] =>
  string(66) "2014-02-24 00:14:04 | ERROR | 8620 | 1502697015147 | 1393172044.862 | test error 3 "
  [3] =>
  string(66) "2014-02-24 00:14:05 | ERROR | 8646 | 599159975a9ff | 1393172045.989 | test error 3 "
  [4] =>
  string(66) "2014-02-24 00:14:07 | ERROR | 8672 | 599159986ec28 | 1393172047.882 | test error 3 "
  [5] =>
  string(66) "2014-02-24 00:14:08 | ERROR | 8698 | 5991599981cec | 1393172048.736 | test error 3 "
}
SeasLog::analyzerDetail(SEASLOG_ERROR,date('Ymd',time()));
只取得当前模块下,当前一天内,level为SEASLOG_ERROR 的信息列表:
array(2) {
  [0] =>
  string(66) "2014-02-24 00:14:02 | ERROR | 8568 | 599157af4e937 | 1393172042.717 | test error 3 "
  [1] =>
  string(66) "2014-02-24 00:14:04 | ERROR | 8594 | 5991576584446 | 1393172044.104 | test error 3 "
}
同理,取当月
$detailErrorArray_mouth = SeasLog::analyzerDetail(SEASLOG_ERROR,date('Ym',time()));
*/

#error_page 404 /404.html;

对象是何等的

  • 便捷、规范的log记录

  • 飞快的海量log深入分析

  • 可安顿、多渠道的log预先警告

使用SeasLog进行常规预先警告

# 设置虚构主机暗中认可访谈的网页;
index index.html index.htm index.php l.php;

常量与函数

# 定义服务器的暗中认可网址根目录地点;
root "D:/phpStudy/WWW";

眼前提供了什么
  • 在PHP项目中便捷、标准地记录log
  • 可布署的默许log目录与模块
  • 点名log目录与收获当前安排
  • 初步的剖释预先警告框架
  • 敏捷的日记缓冲、便捷的缓冲debug
  • 遵循 PSR-3 日志接口标准
  • 自动记录错误音信
  • 自动记录分外音讯
  • 连日来TCP端口,以EscortFC5424格式发送日志
  • 连接UDP端口,以PAJEROFC5424格式发送日志
  • 扶助RequestId区分央求
  • 匡助日志模板自定义

# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;

SEASLOG_ALERT
  • "ALERT" - 必级立刻选择行动的迫切事件、须求及时公告有关人口殷切修复

}

crontab配置
;每天凌晨3点执行
0 3 * * * /path/to/php /path/to/SeasLog/Analyzer/SeasLogAnalyzer.php

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
# 禁止访谈 .htxxxx的文本;
# location ~ /.ht {
# deny all;
# }

本文由必威发布于必威-运维,转载请注明出处:在PHP项目中方便、规范、高效地写日志,允许用

相关阅读