>

PHP SeasLog实现高品质日志记录

- 编辑:乐百家599手机首页 -

PHP SeasLog实现高品质日志记录

利用SeasLog营造PHP项目中的高品质日志组件(1)

什么是SeasLog

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

www.lo599.com,为何使用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的习性非常差。

www.lo599.com 1

那是log4php与SeasLog的性质相比图:

安排思路

那么有未有一种log类库相同的时候满意以下须要吗:

●分模块、分级别

●配置轻便(最棒是勿须配备)

●日志格式清晰易读

●应用轻便、质量很棒

作者们驾驭,PSCRUISER-3规范是八个国际化的日记标准,它供给了“模块、等级、清晰、易用”等日志工作应具有的特征。由此,只要大家遵照了PSR-3规范,则我们能够形成“分模块、分等第”以及“日志格式清晰易读”的渴求。

“配置轻易”那几个需要也很好达成。倘诺严苛依照既定法规,其实只须求安装默许目录就能够了。

OK,现在大家只剩余“品质”那叁个渴求。

既是是日记,免不了会写文件,恐怕经过pipe通过互联网传送到有些存储宗旨(大家暂不驰念存款和储蓄中央的陈设)。能够预计,假设一个呼吁中须要写出一千处log,那么势必会有一千次IO,那对品质将是多少个十分的大的贻误点。一般对于拍卖这种频仍一律的呼吁场景,大家要减轻的莫过于也很粗大略,使用cache或buffer,把数次央求作归并,从而下降对磁盘或网络的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

●服从 PSCR-V-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时,全数日志均不记录。


www.lo599.com 2


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

安装

收获与安装basePath
$basePath_1 = SeasLog::getBasePath();

SeasLog::setBasePath('/log/base_test');
$basePath_2 = SeasLog::getBasePath();

var_dump($basePath_1,$basePath_2);

/*
string(19) "/log/seaslog-ciogao"
string(14) "/log/base_test"
*/

一向利用 SeasLog::getBase帕特h(),将获得php.ini(seaslog.ini)中安装的seaslog.default_basepath 的值。

使用 SeasLog::setBasePath() 函数,将改变 SeasLog::getBasePath() 的取值。

# 监听端口为:80;
listen 80;

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.ini的配置
[SeasLog]
;configuration for php SeasLog module
extension = seaslog.so

;默认log根目录
seaslog.default_basepath = "/var/log/www"

;默认logger目录
seaslog.default_logger = "default"

;日期格式配置 默认"Y-m-d H:i:s"
seaslog.default_datetime_format = "Y-m-d H:i:s"

;日志格式模板 默认"%T | %L | %P | %Q | %t | %M"
seaslog.default_template = "%T | %L | %P | %Q | %t | %M"

;是否以type分文件 1是 0否(默认)
seaslog.disting_type = 1

;是否每小时划分一个文件 1是 0否(默认)
seaslog.disting_by_hour = 0

;是否启用buffer 1是 0否(默认)
seaslog.use_buffer = 0

;buffer中缓冲数量 默认0(不使用buffer_size)
seaslog.buffer_size = 100

;记录日志级别,数字越大,根据级别记的日志越多。
;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

;日志函数调用回溯层级
;影响预定义变量 %F 中的行数
;默认0
seaslog.recall_depth = 0

;自动记录错误 默认1(开启)
seaslog.trace_error = 1

;自动记录异常信息 默认0(关闭)
seaslog.trace_exception = 0

;日志存储介质 1File 2TCP 3UDP (默认为1)
seaslog.appender = 1

;写入重试次数
;默认0(不重试)
seaslog.appender_retry = 0

;接收ip 默认127.0.0.1 (当使用TCP或UDP时必填)
seaslog.remote_host = "127.0.0.1"

;接收端口 默认514 (当使用TCP或UDP时必填)
seaslog.remote_port = 514

;过滤日志中的回车和换行符 (默认为0)
seaslog.trim_wrap = 0

;是否开启抛出SeasLog自身异常  1开启(默认) 0否
seaslog.throw_exception = 1

;是否开启忽略SeasLog自身warning  1开启(默认) 0否
seaslog.ignore_warning = 1
  • 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 = 8 记录的日志品级.默感到8,即全体日志均记录。
  • seaslog.level = 0 记录EMERGENCY。
  • seaslog.level = 1 记录EMERGENCY、ALERT。
  • seaslog.level = 2 记录EMERGENCY、ALERT、CRITICAL。
  • seaslog.level = 3 记录EMERGENCY、ALERT、CRITICAL、ERROR。
  • seaslog.level = 4 记录EMERGENCY、ALERT、CRITICAL、ERROR、- WARNING。
  • seaslog.level = 5 记录EMERGENCY、ALERT、CRITICAL、ERROR、WARNING、NOTICE。
  • seaslog.level = 6 记录EMERGENCY、ALERT、CRITICAL、ERROR、WARNING、NOTICE、INFO。
  • seaslog.level = 7 记录EMERGENCY、ALERT、CRITICAL、ERROR、WARNING、NOTICE、INFO、DEBUG。
  • seaslog.throw_exception = 1 开启抛出SeasLog抛出本身的要命。当出现录权限或接收服务器端口不通等情景时,抛出非常;关闭时不抛出非常。
  • seaslog.ignore_warning = 1 拉开忽略SeasLog自个儿的告诫。当出现目录权限或抽出服务器端口不通等情状时,将实行忽略;关闭时,将抛出警示。

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
# proxy_pass ;
#}

缘何采纳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奥迪Q3-3 日志接口标准

当seaslog.appender配置为 2(TCP) 或 3(UDP) 时,日志将推送至remote_host:remote_port的TCP或UDP端口

SeasLog发送至远端时,遵循标准RFC5424
log格式统一为:
<PRI>1 {timeStampWithRFC3339} {HostName} {loggerName}[{pid}]: {logInfo}
上述{logInfo}
受配置 seaslog.default_template影响。

发送出去的格式如:
<15>1 2017-08-27T01:24:59 08:00 vagrant-ubuntu-trusty test/logger[27171]: 2016-06-25 00:59:43 | DEBUG | 21423 | 599157af4e937 | 1466787583.322 | this is a neeke debug
<14>1 2017-08-27T01:24:59 08:00 vagrant-ubuntu-trusty test/logger[27171]: 2016-06-25 00:59:43 | INFO | 21423 | 599157af4e937 | 1466787583.323 | this is a info log
<13>1 2017-08-27T01:24:59 08:00 vagrant-ubuntu-trusty test/logger[27171]: 2016-06-25 00:59:43 | NOTICE | 21423 | 599157af4e937 | 1466787583.324 | this is a notice log

如有错误、请告诉;

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

快捷总计某项目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)
*/

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

工程师必上的开荒者服务平台 —— DevStore

SEASLOG_CRITICAL
  • "CPRADOITICAL" - 急迫景况、供给及时张开修补、程序组件不可用

# HTTPS server
#
#server {
# listen 443;
# server_name localhost;

编写翻译安装 seaslog

$ /path/to/phpize
$ ./configure --with-php-config=/path/to/php-config
$ make && make install
日志模板表明
  • 模板默以为:seaslog.default_template = "%T | %L | %P | %Q | %t | %M",意味着,暗许的格式为{dateTime} | {level} | {pid} | {uniqid} | {timeStamp} | {logInfo}
  • 假诺自定义的格式为:seaslog.default_template = "[%T]:%L %P %Q %t %M"
    那便是说,日志格式将被自定义为:[{dateTime}]:{level} {pid} {uniqid} {timeStamp} {logInfo}
    注意:%L 必须在%M在此之前,即:日志等第,必须在日记内容前边。

# 设置虚构主机暗许访问的网页;
index index.html index.htm index.php l.php;

对象是什么样的

  • 便捷、规范的log记录

  • 马上的海量log深入分析

  • 可配备、多门路的log预先警告

函数列表

SeasLog 提供了那般一组函数,能够方便地获得与安装根目录、模块目录、神速写入与总计log。 相信从下述伪代码的表明中,您能够长足获得函数音讯,具体行使将紧接其后:

<?php
/**
 * @author neeke@php.net
 * Date: 14-1-27 下午4:47
 */
define('SEASLOG_ALL', 'ALL');
define('SEASLOG_DEBUG', 'DEBUG');
define('SEASLOG_INFO', 'INFO');
define('SEASLOG_NOTICE', 'NOTICE');
define('SEASLOG_WARNING', 'WARNING');
define('SEASLOG_ERROR', 'ERROR');
define('SEASLOG_CRITICAL', 'CRITICAL');
define('SEASLOG_ALERT', 'ALERT');
define('SEASLOG_EMERGENCY', 'EMERGENCY');
define('SEASLOG_DETAIL_ORDER_ASC', 1);
define('SEASLOG_DETAIL_ORDER_DESC', 2);

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 string
     * @return bool
     */
    static public function setRequestID($request_id){
        return TRUE;
    }
    /**
     * 获取本次请求标识
     * @return string
     */
    static public function getRequestID(){
        return uniqid();
    }

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

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

    /**
     * 设置DatetimeFormat配置
     * @param $format
     *
     * @return bool
     */
    static public function setDatetimeFormat($format)
    {
        return TRUE;
    }

    /**
     * 返回当前DatetimeFormat配置格式
     * @return string
     */
    static public function getDatetimeFormat()
    {
        return 'the datetimeFormat';
    }

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

    /**
     * 以数组形式,快速取出某类型log的各行详情
     *
     * @param        $level
     * @param string $log_path
     * @param null   $key_word
     * @param int    $start
     * @param int    $limit
     * @param        $order 默认为正序 SEASLOG_DETAIL_ORDER_ASC,可选倒序 SEASLOG_DETAIL_ORDER_DESC
     *
     * @return array
     */
    static public function analyzerDetail($level = SEASLOG_INFO, $log_path = '*', $key_word = NULL, $start = 1, $limit = 20, $order = SEASLOG_DETAIL_ORDER_ASC)
    {
        return array();
    }

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

    /**
     * 将buffer中的日志立刻刷到硬盘
     *
     * @return bool
     */
    static public function flushBuffer()
    {
        return TRUE;
    }

    /**
     * 记录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 = '')
    {

    }
}

# 定义服务器的私下认可网址根目录位置;
root "D:/phpStudy/WWW";

SEASLOG_ERROR
  • "E奥迪Q5RO帕杰罗" - 运维时出现的荒谬、不供给及时开始展览修补、不影响总体逻辑的周转、必要记录并做检查实验

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

SeasLog Logger的使用

# location / {
# root html;
# index index.html index.htm;
# }
#}

脚下提供了何等
  • 在PHP项目中便捷、标准地记录log
  • 可配备的暗中认可log目录与模块
  • 点名log目录与收获当前布置
  • 始发的深入分析预先警告框架
  • 飞速的日记缓冲、便捷的缓冲debug
  • 遵循 PSR-3 日志接口标准
  • 自动记录错误音信
  • 自动记录非凡消息
  • 总是TCP端口,以SportageFC5424格式发送日志
  • 连接UDP端口,以君越FC5424格式发送日志
  • 帮助RequestId区分伏乞
  • 支撑日志模板自定义

include vhosts.conf;

自定义日志模板

众多对象在选拔进度中涉及自定义日志模板的须求,于是自1.7.2本子开始,具备了那一个力量,允许用户自定义日志的沙盘, 同有的时候候在模板中得以接纳预置的累累预设变量,参照预设变量表。

# 设定乞请缓存;
large_client_header_buffers 4 256k;

简介

# 设置主机域名;
server_name localhost;

SEASLOG_NOTICE
  • "NOTICE" - 一般主要事件、实践进度中较INFO等第更为主要的音讯

# 设置访问的与语言编码;
# charset koi8-r;

常量与函数

# 法斯特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;

本文由乐百家服务器发布,转载请注明来源:PHP SeasLog实现高品质日志记录