SeasLog-1.4.2 发布! SeasLog是一个轻量,高效,便捷,规范的PHP日志扩展,精准的定位\精巧的设计,使它在PHP项目中逐步成为一个非常优秀的日志工具. Change log: 1.2.2 - Fixed Logger bug with PHP-Version -ge 5.4 - Fixed SeasLog::log('level','message','content',['logger']) bug - Support SeasLog::analyzerDetail("all") - Support SeasLog::analyzerCount("all") 1.2.3 - Fixed issue #44 Seaslog::analyzerDetail([with out 'all']) - Support CONST SEASLOG_ALL 1.4.0 - Fixed issue #42 support error and exception automatic logging. - Optimization performance, update is_dir with access. 1.4.2 - Fixed issue #47 support trace_error and trace_exception switch. - Fixed issue #48 Ignore notice or warning, but error automatic logging.
附1:PECL项目主页http://pecl.php.net/package/SeasLog 附2:GitHub项目主页https://github.com/Neeke/SeasLog
SeasLog Yet a log extension for PHP.A effective,fast,stable log extension for PHP @author Chitao.Gao [neeke@php.net] 为什么使用SeasLoglog日志,通常是系统或软件、应用的运行记录。通过log的分析,可以方便用户了解系统或软件、应用的运行情况;如果你的应用log足够丰富,也可以分析以往用户的操作行为、类型喜好、地域分布或其他更多信息;如果一个应用的log同时也分了多个级别,那么可以很轻易地分析得到该应用的健康状况,及时发现问题并快速定位、解决问题,补救损失。 php内置error_log、syslog函数功能强大且性能极好,但由于各种缺陷(error_log无错误级别、无固定格式,syslog不分模块、与系统日志混合),灵活度降低了很多,不能满足应用需求。 好消息是,有不少第三方的log类库弥补了上述缺陷,如log4php、plog、Analog等(当然也有很多应用在项目中自己开发的log类)。其中以log4php最为著名,设计精良、格式完美、文档完善、功能强大。推荐。 不过log4php在性能方面表现非常差,下图是SeasLog与log4php的ab并发性能测试( 测试环境:Ubuntu12.04单机,CPU I3,内存 16G,硬盘 SATA 7200): 
那么有没有一种log类库满足以下需求呢: 分模块、分级别 配置简单(最好是勿须配置) 日志格式清晰易读 应用简单、性能很棒
SeasLog 正是应此需求而生。 目前提供了什么 在PHP项目中便捷、规范地记录log 可配置的默认log目录与模块 指定log目录与获取当前配置 初步的分析预警框架 高效的日志缓冲、便捷的缓冲debug 遵循 PSR-3 日志接口规范
目标是怎样的便捷、规范的log记录 高效的海量log分析 可配置、多途径的log预警
安装编译安装 seaslog1 2 3 | $ /path/to/phpize
$ . /configure --with-php-config= /path/to/php-config
$ make && make install
|
seaslog.ini的配置
1 2 3 4 5 6 7 8 9 10 11 | ; 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.trace_error = 0 ;自动记录错误 默认0(关闭)
seaslog.trace_exception = 1 ;自动记录异常信息 默认1(开启)
|
seaslog.disting_type = 1 开启以type分文件,即log文件区分info\warn\erro
seaslog.disting_by_hour = 1 开启每小时划分一个文件
seaslog.use_buffer = 1 开启buffer。默认关闭。当开启此项时,日志预存于内存,当请求结束时(或异常退出时)一次写入文件。
常量与函数
常量列表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | * 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);
|
函数列表
SeasLog 提供了这样一组函数,可以方便地获取与设置根目录、模块目录、快速写入与统计log。 相信从下述伪代码的注释中,您可以快速获取函数信息,具体使用将紧接其后: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 | <?php
class SeasLog
{
public function __construct()
{
#SeasLog init
}
public function __destruct()
{
#SeasLog distroy
}
static public function setBasePath( $basePath )
{
return TRUE;
}
static public function getBasePath()
{
return 'the base_path' ;
}
static public function setLogger( $module )
{
return TRUE;
}
static public function getLastLogger()
{
return 'the lastLogger' ;
}
static public function analyzerCount( $level = 'all' , $log_path = '*' )
{
return array ();
}
static public function analyzerDetail( $level = SEASLOG_INFO, $log_path = '*' )
{
return array ();
}
static public function getBuffer()
{
return array ();
}
static public function debug( $message , array $content = array (), $module = '' )
{
# $level = SEASLOG_DEBUG
}
static public function info( $message , array $content = array (), $module = '' )
{
# $level = SEASLOG_INFO
}
static public function notice( $message , array $content = array (), $module = '' )
{
# $level = SEASLOG_NOTICE
}
static public function warning( $message , array $content = array (), $module = '' )
{
# $level = SEASLOG_WARNING
}
static public function error( $message , array $content = array (), $module = '' )
{
# $level = SEASLOG_ERROR
}
static public function critical( $message , array $content = array (), $module = '' )
{
# $level = SEASLOG_CRITICAL
}
static public function alert( $message , array $content = array (), $module = '' )
{
# $level = SEASLOG_ALERT
}
static public function emergency( $message , array $content = array (), $module = '' )
{
# $level = SEASLOG_EMERGENCY
}
static public function log( $level , $message , array $content = array (), $module = '' )
{
}
}
|
SeasLog Logger的使用(详细文档) 使用SeasLog进行健康预警
预警的配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | [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配置 1 2 | ;每天凌晨3点执行
0 3 * * * /path/to/php /path/to/SeasLog/Analyzer/SeasLogAnalyzer.php
|
Demo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php
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' ));
echo "\n" ;
|
|