使用SeasLog打造PHP项目中的高性能日志组件,配置

日期:2019-09-17编辑作者:澳门金莎娱乐手机版

运用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类库同有的时候间满足以下供给吗:

●分模块、分级别

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

●日志格式清晰易读

●应用简单、质量很棒

咱俩领略,PS翼虎-3标准是三个国际化的日志标准,它须要了“模块、品级、清晰、易用”等日志专门的工作应享有的特征。因而,只要我们根据了PSOdyssey-3标准,则大家可以完结“分模块、分等第”以及“日志格式清晰易读”的渴求。

“配置轻便”这么些要求也很好成功。假设严刻依照既定法则,其实只要求设置暗中认可目录就足以了。

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

既然如此是日记,免不了会写文件,大概通过pipe通过网络传送到某些存款和储蓄核心(我们暂不想念存款和储蓄中心的谋算)。可以推测,若是贰个乞求中需求写出一千处log,那么势必会有1000次IO,那对品质将是三个非常大的贻误点。一般对于拍卖这种再三平等的必要场景,大家要消除的实在也很简短,使用cache或buffer,把数12遍伸手作归并,进而减弱对磁盘或网络的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

●服从 PSPAJERO-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.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实行正规预先警告

# 定义服务器的默许网址根目录地方;
root "D:/phpStudy/WWW";

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

指标是怎样的
  • 便捷、规范的log记录
  • 迅猛的雅量log剖判
  • 可配置、多渠道的log预先警告

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

技术员必上的开拓者服务平台 —— DevStore

自定义日志模板

相当多朋友在运用进程中涉及自定义日志模板的须要,于是自1.7.2本子开首,具备了那个技艺,允许顾客自定义日志的沙盘, 同期在模板中能够使用预置的不在少数预设变量,参照预设变量表。

# 作用于socket参数TCP_NODELAY;
# 禁止使用nagle算法,也即不缓存数据;
# nagle缓存算法;
# 有个别应用程序在互连网通信的时候会发送比比较少的字节;
# 比方说贰个字节,那么再加TCP左券本身;
# 实际上发的要四十三个字节,那样的作用是好低的;
# 那时候nagle算法就应际而生了;
# 它就要发送的多少贮存在缓存里;
# 当储存到零星或一定时期,再将它们发送出去;
# tcp_nodelay on;

安装

十分的快写入log

上面已经安装过了basePath与logger,于是log记录的目录已经发生了,

log记录目录 = basePath / logger / {fileName}.log log文件名,以 年月日 分文件,如前天是二〇一四年02月14日期,那么 {fileName} = 二〇一四0218;

还记得 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

# 钦点进度id的蕴藏文件;
# pid logs/nginx.pid;

编写翻译安装 seaslog

$ /path/to/phpize
$ ./configure --with-php-config=/path/to/php-config
$ make && make install
设置logger与获取lastLogger
$lastLogger_1 = SeasLog::getLastLogger();

SeasLog::setLogger('testModule/app1');
$lastLogger_2 = SeasLog::getLastLogger();

var_dump($lastLogger_1,$lastLogger_2);
/*
string(7) "default"
string(15) "testModule/app1"
*/
  • 与basePath相类似的,
  • 直白动用 SeasLog::getLastLogger(),将取得php.ini(seaslog.ini)中装置的seaslog.default_logger的值。
  • 使用 SeasLog::setLogger() 函数,将改变 SeasLog::getLastLogger()的取值。

add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
add_header PS 1;

目的是怎样的

  • 便捷、规范的log记录

  • 急忙的雅量log剖判

  • 可布署、多渠道的log预先警告

日记模板表达
  • 模板默感到:seaslog.default_template = "%T | %L | %P | %Q | %t | %M",意味着,暗许的格式为{date提姆e} | {level} | {pid} | {uniqid} | {timeStamp} | {logInfo}
  • 假如自定义的格式为:seaslog.default_template = "[%T]:%L %P %Q %t %M"
    那么,日志格式将被自定义为:[{dateTime}]:{level} {pid} {uniqid} {timeStamp} {logInfo}
    只顾:%L 必需在%M在此之前,即:日志品级,必须在日记内容前面。

# 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奥迪Q5-3 日志接口规范

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

# 开启高效文件传输情势;
# sendfile 指令钦定nginx 是不是调用sendfile 函数(zero、copy情势)来输出文件;
# 对于普通的应用、必得设置为ON;
# 借使用来开展下载使用、IO重负载应用、可设置为OFF;
# 以此来平衡磁盘与IO管理速度、收缩系统的uptime
sendfile on;

PHP Re 结果
/usr/local/php/php-7.0.6-zts-debug/bin/php --re seaslog

Extension [ <persistent> extension #32 SeasLog version 1.6.9 ] {

  - Dependencies {
  }

  - INI {
    Entry [ seaslog.default_basepath <ALL> ]
      Current = '/var/log/www'
    }
    Entry [ seaslog.default_logger <ALL> ]
      Current = 'defauult'
    }
    Entry [ seaslog.default_datetime_format <ALL> ]
      Current = 'Y-m-d H:i:s'
    }
    Entry [ seaslog.default_template <ALL> ]
      Current = '%L | %P | %Q | %t | %T | %M'
    }
    Entry [ seaslog.disting_type <ALL> ]
      Current = '0'
    }
    Entry [ seaslog.disting_by_hour <ALL> ]
      Current = '0'
    }
    Entry [ seaslog.use_buffer <ALL> ]
      Current = '1'
    }
    Entry [ seaslog.trace_error <ALL> ]
      Current = '1'
    }
    Entry [ seaslog.trace_exception <ALL> ]
      Current = '1'
    }
    Entry [ seaslog.buffer_size <ALL> ]
      Current = '10'
    }
    Entry [ seaslog.level <ALL> ]
      Current = '0'
    }
    Entry [ seaslog.appender <ALL> ]
      Current = '1'
    }
    Entry [ seaslog.remote_host <ALL> ]
      Current = '127.0.0.1'
    }
    Entry [ seaslog.remote_port <ALL> ]
      Current = '514'
    }
    Entry [ seaslog.trim_wrap <ALL> ]
      Current = '0'
    }
    Entry [ seaslog.throw_exception <ALL> ]
      Current = '1'
    }
    Entry [ seaslog.ignore_warning <ALL> ]
      Current = '1'
    }
  }

  - Constants [16] {
    Constant [ string SEASLOG_VERSION ] { 1.7.5 }
    Constant [ string SEASLOG_AUTHOR ] { Chitao.Gao  [ neeke@php.net ] }
    Constant [ string SEASLOG_ALL ] { ALL }
    Constant [ string SEASLOG_DEBUG ] { DEBUG }
    Constant [ string SEASLOG_INFO ] { INFO }
    Constant [ string SEASLOG_NOTICE ] { NOTICE }
    Constant [ string SEASLOG_WARNING ] { WARNING }
    Constant [ string SEASLOG_ERROR ] { ERROR }
    Constant [ string SEASLOG_CRITICAL ] { CRITICAL }
    Constant [ string SEASLOG_ALERT ] { ALERT }
    Constant [ string SEASLOG_EMERGENCY ] { EMERGENCY }
    Constant [ integer SEASLOG_DETAIL_ORDER_ASC ] { 1 }
    Constant [ integer SEASLOG_DETAIL_ORDER_DESC ] { 2 }
    Constant [ integer SEASLOG_APPENDER_FILE ] { 1 }
    Constant [ integer SEASLOG_APPENDER_TCP ] { 2 }
    Constant [ integer SEASLOG_APPENDER_UDP ] { 3 }
  }

  - Functions {
    Function [ <internal:SeasLog> function seaslog_get_version ] {
    }
    Function [ <internal:SeasLog> function seaslog_get_author ] {
    }
  }

  - Classes [1] {
    Class [ <internal:SeasLog> class SeasLog ] {

      - Constants [0] {
      }

      - Static properties [0] {
      }

      - Static methods [19] {
        Method [ <internal:SeasLog> static public method setBasePath ] {

          - Parameters [1] {
            Parameter #0 [ <required> $base_path ]
          }
        }

        Method [ <internal:SeasLog> static public method getBasePath ] {
        }

        Method [ <internal:SeasLog> static public method setLogger ] {

          - Parameters [1] {
            Parameter #0 [ <required> $logger ]
          }
        }

        Method [ <internal:SeasLog> static public method getLastLogger ] {
        }

        Method [ <internal:SeasLog> static public method setRequestID ] {

          - Parameters [1] {
            Parameter #0 [ <required> $request_id ]
          }
        }

        Method [ <internal:SeasLog> static public method getRequestID ] {
        }

        Method [ <internal:SeasLog> static public method setDatetimeFormat ] {

          - Parameters [1] {
            Parameter #0 [ <required> $format ]
          }
        }

        Method [ <internal:SeasLog> static public method getDatetimeFormat ] {
        }

        Method [ <internal:SeasLog> static public method analyzerCount ] {

          - Parameters [3] {
            Parameter #0 [ <required> $level ]
            Parameter #1 [ <optional> $log_path ]
            Parameter #2 [ <optional> $key_word ]
          }
        }

        Method [ <internal:SeasLog> static public method analyzerDetail ] {

          - Parameters [6] {
            Parameter #0 [ <required> $level ]
            Parameter #1 [ <optional> $log_path ]
            Parameter #2 [ <optional> $key_word ]
            Parameter #3 [ <optional> $start ]
            Parameter #4 [ <optional> $limit ]
            Parameter #5 [ <optional> $order ]
          }
        }

        Method [ <internal:SeasLog> static public method getBuffer ] {
        }

        Method [ <internal:SeasLog> static public method flushBuffer ] {
        }

        Method [ <internal:SeasLog> static public method log ] {

          - Parameters [4] {
            Parameter #0 [ <required> $level ]
            Parameter #1 [ <optional> $message ]
            Parameter #2 [ <optional> $content ]
            Parameter #3 [ <optional> $logger ]
          }
        }

        Method [ <internal:SeasLog> static public method debug ] {

          - Parameters [3] {
            Parameter #0 [ <required> $message ]
            Parameter #1 [ <optional> $content ]
            Parameter #2 [ <optional> $logger ]
          }
        }

        Method [ <internal:SeasLog> static public method info ] {

          - Parameters [3] {
            Parameter #0 [ <required> $message ]
            Parameter #1 [ <optional> $content ]
            Parameter #2 [ <optional> $logger ]
          }
        }

        Method [ <internal:SeasLog> static public method notice ] {

          - Parameters [3] {
            Parameter #0 [ <required> $message ]
            Parameter #1 [ <optional> $content ]
            Parameter #2 [ <optional> $logger ]
          }
        }

        Method [ <internal:SeasLog> static public method warning ] {

          - Parameters [3] {
            Parameter #0 [ <required> $message ]
            Parameter #1 [ <optional> $content ]
            Parameter #2 [ <optional> $logger ]
          }
        }

        Method [ <internal:SeasLog> static public method error ] {

          - Parameters [3] {
            Parameter #0 [ <required> $message ]
            Parameter #1 [ <optional> $content ]
            Parameter #2 [ <optional> $logger ]
          }
        }

        Method [ <internal:SeasLog> static public method critical ] {

          - Parameters [3] {
            Parameter #0 [ <required> $message ]
            Parameter #1 [ <optional> $content ]
            Parameter #2 [ <optional> $logger ]
          }
        }

        Method [ <internal:SeasLog> static public method alert ] {

          - Parameters [3] {
            Parameter #0 [ <required> $message ]
            Parameter #1 [ <optional> $content ]
            Parameter #2 [ <optional> $logger ]
          }
        }

        Method [ <internal:SeasLog> static public method emergency ] {

          - Parameters [3] {
            Parameter #0 [ <required> $message ]
            Parameter #1 [ <optional> $content ]
            Parameter #2 [ <optional> $logger ]
          }
        }
      }

      - Properties [0] {
      }

      - Methods [2] {
        Method [ <internal:SeasLog, ctor> public method __construct ] {
        }

        Method [ <internal:SeasLog, dtor> public method __destruct ] {
        }
      }
    }
  }
}

# ssl_session_timeout 5m;

自定义日志模版变量表

SeasLog提供了下列预设变量,能够一向运用在日记模板中,就要日记最后生成时替换来对应值。

  • %L - Level 日志品级。
  • %M - Message 日志消息。
  • %T - DateTime 如2017-08-16 19:15:02,受seaslog.default_datetime_format影响。
  • %t - Timestamp 如1502882102.862,准确到毫秒数。
  • %Q - RequestId 区分单次恳求,如未有调用SeasLog::setRequestId($string)方法,则在开首化诉求时,选择内置的static char *get_uniqid()方法生成的惟一值。
  • %H - HostName 主机名。
  • %P - ProcessId 进程ID。
  • %D - Domain:Port 域名:口号,如www.cloudwise.com:8080; Cli格局下为cli。
  • %福睿斯 - Request U奥迪Q3I 央求U奥迪Q3I,如/app/user/signin; Cli情势下为入口文件,如CliIndex.php。
  • %m - Request Method 央求类型,如GET; Cli形式下为施行命令,如/bin/bash。
  • %I - Client IP 来源顾客端IP; Cli方式下为local。取值优先级为:HTTP_X_REAL_IP > HTTP_X_FORWARDED_FOR > REMOTE_ADDR
  • %F - FileName:LineNo 文件名:行号,如UserService.php:118。
  • %C - TODO Class::Action 类名::方法名,如UserService::getUserInfo。

}

SEASLOG_CRITICAL
  • "C揽胜ITICAL" - 热切情状、须要即刻开展修补、程序组件不可用

# 职业情势及连接数上限;
events {

SEASLOG_NOTICE
  • "NOTICE" - 一般首要事件、施行进程中较INFO等第更为重要的新闻

# 开启的线程数、平时与CPU的数码一样;
# 各类nginx进程消耗的内部存款和储蓄器是10兆左右;
worker_processes 1;

眼前提供了怎么着
  • 在PHP项目中便捷、标准地记录log
  • 可配备的私下认可log目录与模块
  • 点名log目录与收获当前配备
  • 开首的深入分析预先警告框架
  • 立刻的日记缓冲、便捷的缓冲debug
  • 遵循 PSR-3 日志接口标准
  • 自动记录错误音讯
  • 自动记录十分音信
  • 连天TCP端口,以智跑FC5424格式发送日志
  • 连接UDP端口,以V8 VantageFC5424格式发送日志
  • 协理RequestId区分央浼
  • 扶助日志模板自定义

#################################

常量与函数

#
client_max_body_size 100m;

预警的配备
[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

# 设置三个nginx进度张开的最多文件陈述符数目;
# 理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进度数相除;
# 但是nginx分配哀告并不均匀、所以提议与ulimit -n的值保持一致;
# 因为nginx调治时分配央浼到进度实际不是那么的平衡;
# 所以当填写的值稍低于实际总并发量时、就能够回到502谬误;
# worker_rlimit_nofile 65535;

收获与安装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::getBasePath(),将获得php.ini(seaslog.ini)中安装的seaslog.default_basepath 的值。

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

# 设定设想主机配置;
server {

常量列表

SeasLog 共将日志分成8个级别

##### HttpGZip模块配置;
# httpGzip modules
# 开启gzip压缩;
# gzip on;
gzip on;
# 设置允许优惠扣的页面最小字节数;
gzip_澳门金莎娱乐手机版,min_length 1k;
# 申请4个单位为32K的内部存款和储蓄器作为压缩结果流缓存;
gzip_buffers 4 32k;
# 设置识别http合同的版本,默感觉1.1;
gzip_http_version 1.1;
# 内定gzip压缩比,1-9数字越小,压缩比越小,速度越快;
gzip_comp_level 2;
# 钦命压缩的种类;
gzip_types text/plain application/x-javascript text/css application/xml;
#让前边二个的缓存服务器进过gzip压缩的页面;
gzip_vary on;
gzip_disable "MSIE [1-6].";

SEASLOG_DEBUG
  • "DEBUG" - debug音讯、细粒度音信事件

# 定义单个进程的最大并发连接数,受系统经过的最大张开文件数量限制;
# 最辛辛那提接数=连接数*进程数;
worker_connections 1024;

使用

# nginx跨域;

编写翻译安装 SeasLog
$ wget https://github.com/Neeke/SeasLog/archive/master.zip
$ unzip master.zip
$ cd /path/to/SeasLog
$ phpize
$ ./configure --with-php-config=/path/to/php-config
$ make -j2 
$ sudo make install

##### Nginx的Http服务器配置,Gzip配置;
http {

SEASLOG_ERROR
  • "E福睿斯ROENVISION" - 运营时出现的谬误、不需要及时张开修复、不影响全数逻辑的运营、需求记录并做检查评定

临时到那、现在选择、及时校订;

安装

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

SeasLog Logger的使用

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

当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

# 设置设想主机访谈日志的存放路线及日志的格式为main;
# access_log logs/host.access.log main;

函数列表

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 = '')
    {

    }
}

}

SEASLOG_ALERT
  • "ALERT" - 必级立即接纳行动的急切事件、须要登时公告相关人士迫切修复

# 设置主机域名;
server_name localhost;

高效总括某项目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)
*/

# 开启幸免互连网阻塞;
# tcp_nopush on;

SEASLOG_WARNING
  • "WARNING" - 现身了非错误性的百般消息、潜在非常音信、需求关注并且需求修补

# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

SeasLog Analyzer的使用

# 法斯特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在性质方面表现十二分数之差,下图是SeasLog与log4php的ab并发品质测验( 测量试验情形:Ubuntu12.04单机,CPU I3,内部存款和储蓄器 16G,硬盘 SATA 7200):

澳门金莎娱乐手机版 3

SeasLogVSlog4php.png

那么有未有一种log类库满足以下供给呢:

  • 分模块、分级别
  • 安顿轻易(最佳是勿须配备)
  • 日志格式清晰易读
  • 行使轻易、质量很棒

SeasLog 就是应此需求而生。

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

得到某项目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()));
*/

 

SEASLOG_INFO
  • "INFO" - 首要事件、重申应用程序的运营进度

# 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.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自己的告诫。当出现目录权限或收取服务器端口不通等情形时,将拓宽忽略;关闭时,将抛出警示。

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

SEASLOG_EMERGENCY
  • "EMEXC60GENCY" - 系统不可用
var_dump(SEASLOG_DEBUG,SEASLOG_INFO,SEASLOG_NOTICE);
/*
string('DEBUG') debug级别
string('INFO')  info级别
string('NOTICE') notice级别
*/

# 援引日志main;
# access_log logs/access.log main;

简介

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

# 钦赐nginx运营的顾客以及客商组、默以为nobody;
# user nobody;

# 开启访谈是目录呈现;
autoindex on;
}

# 服务器名字的hash表大小;
server_names_hash_bucket_size 128;

# 日志格式的设定,main为日志格式的名目,可自行设置,前边引用;
# log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

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

# 主题模块指令、智力私下认可设置为二进制流;
# 相当于当文件类型未定义时采取这种措施;
default_type application/octet-stream;

#error_page 404 /404.html;

# 错误日志文件、等第以notice显示;
# 有debug、info、warn、error、crit格局、debug输出最多、crit输出最少;
# error_log logs/error.log;
# error_log logs/error.log notice;
# error_log logs/error.log info;

include vhosts.conf;

# 设置设想主机私下认可访谈的网页;
index index.html index.htm index.php l.php;

# 设置客商端连接保存活动的逾期时间;
# keepalive_timeout 0;
keepalive_timeout 65;
# 顾客乞请头缓冲大小;
# nginx暗中认可会用client_header_buffer_size这个buffer来读取header值;
# 如果header过大,它会利用large_client_header_buffers来读取;
# 固然设置过小HTTP头/Cookie过大 会报400 错误 nginx 400 bad request;
# 假设越过buffer,就能够报HTTP 414荒唐(UEscortI Too Long);
# nginx接受最长的HTTP尾部大小必得比内部一个buffer大;
# 不然就能够报400的HTTP错误(Bad Request);
# 设定上传文件大小限制;
client_header_buffer_size 256k;

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

# 主模块指令,完结对铺排文件所蕴藏的文书的设定,能够削减主配置文件的复杂度;
# DNS主配置文件中的zonerfc一九一一;
# acl基本上都以用include语句;
# 设定mime类型,类型由mime.type文件定义;
include mime.types;

如有错误、请告诉;

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

# 设置设想主机的中坚音信;
location / {

# PHP脚本的呼吁全部中间转播到法斯特CGI管理;
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}

 

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

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

本文由澳门金莎娱乐网站发布于澳门金莎娱乐手机版,转载请注明出处:使用SeasLog打造PHP项目中的高性能日志组件,配置

关键词:

ITIL与运维管理结合之道,COSS使用体验澳门金莎娱

BKJIA.com独家特稿】编者按:如今,ITIL已经不再是一个新生事物,但很多运维人员并不是很了解究竟什么是ITIL,ITIL又...

详细>>

没有服务台,如何做好服务流程

BKJIA.com 综合报道】 告别混乱从服务台开始 随着ITSM服务管理方法论在国内的日益普及,越来越多的企业会考虑通过事...

详细>>

IT运维舞会上的澳门金莎娱乐手机版,只可远观

从市廛实际的IT运行角度来看,BSMBusiness ServiceManagement:业务服务处理)是推向IT与事务融入,完成、改革公司司IT管理...

详细>>

端到端APM应用性能的管理观,如何高效运营it项目

5、不断调整 因此,一旦变革发生,IT ITIL实践解读:端到端APM应用性能的管理观(1) 问题和事件管理是 APM 的两个核心...

详细>>