PHP日志擴(kuò)展SeasLog-1.6.0,支持TCP,UDP發(fā)送

PHP日志擴(kuò)展SeasLog-1.6.0,支持TCP,UDP發(fā)送

SeasLog-1.6.0 發(fā)布,支持TCP,UDP發(fā)送,輕量高效的PHP日志擴(kuò)展。

改進(jìn)日志:

此次改進(jìn)支持appender配置,同時(shí)支持File,TCP,UDP三種發(fā)送方式。

- Fixed issue #90 #92 Date format.

- Fixed issue #96 Clear memory leaks.

- Fixed issue #91 Support TCP UDP appender.

- Support appender with config, switch File TCP UDP; config the remote_host and remote_port.

為什么使用SeasLog

log日志,通常是系統(tǒng)或軟件、應(yīng)用的運(yùn)行記錄。通過log的分析,可以方便用戶了解系統(tǒng)或軟件、應(yīng)用的運(yùn)行情況;如果你的應(yīng)用log足夠豐富,也可以分析以往用戶的操作行為、類型喜好、地域分布或其他更多信息;如果一個(gè)應(yīng)用的log同時(shí)也分了多個(gè)級(jí)別,那么可以很輕易地分析得到該應(yīng)用的健康狀況,及時(shí)發(fā)現(xiàn)問題并快速定位、解決問題,補(bǔ)救損失。

php內(nèi)置error_log、syslog函數(shù)功能強(qiáng)大且性能極好,但由于各種缺陷(error_log無錯(cuò)誤級(jí)別、無固定格式,syslog不分模塊、與系統(tǒng)日志混合),靈活度降低了很多,不能滿足應(yīng)用需求。

好消息是,有不少第三方的log類庫彌補(bǔ)了上述缺陷,如log4php、plog、Analog等(當(dāng)然也有很多應(yīng)用在項(xiàng)目中自己開發(fā)的log類)。其中以log4php最為著名,設(shè)計(jì)精良、格式完美、文檔完善、功能強(qiáng)大。推薦。

不過log4php在性能方面表現(xiàn)非常差,下圖是SeasLog與log4php的ab并發(fā)性能測(cè)試( 測(cè)試環(huán)境:Ubuntu12.04單機(jī),CPU I3,內(nèi)存 16G,硬盤 SATA 7200):

那么有沒有一種log類庫滿足以下需求呢:

分模塊、分級(jí)別

配置簡(jiǎn)單(最好是勿須配置)

日志格式清晰易讀

應(yīng)用簡(jiǎn)單、性能很棒

SeasLog?正是應(yīng)此需求而生。

目前提供了什么

在PHP項(xiàng)目中便捷、規(guī)范地記錄log

可配置的默認(rèn)log目錄與模塊

指定log目錄與獲取當(dāng)前配置

初步的分析預(yù)警框架

高效的日志緩沖、便捷的緩沖debug

遵循 PSR-3 日志接口規(guī)范

自動(dòng)記錄錯(cuò)誤信息

自動(dòng)記錄異常信息

支持TCP發(fā)送

支持UDP發(fā)立大

目標(biāo)是怎樣的

便捷、規(guī)范的log記錄

高效的海量log分析

可配置、多途徑的log預(yù)警

安裝

編譯安裝 SeasLog

$?/path/to/phpize

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

$?make?&&?make?install

PECL安裝SeasLog

$?pecl?install?seaslog

seaslog.ini 的配置

;?configuration?for?php?SeasLog?module

extension?=?seaslog.so

seaslog.default_basepath?=?/log/seaslog-test????????????;默認(rèn)log根目錄

seaslog.default_logger?=?default????????????????????????;默認(rèn)logger目錄

seaslog.disting_type?=?1????????????????????????????????;是否以type分文件?1是?0否(默認(rèn))

seaslog.disting_by_hour?=?1?????????????????????????????;是否每小時(shí)劃分一個(gè)文件?1是?0否(默認(rèn))

seaslog.use_buffer?=?1??????????????????????????????????;是否啟用buffer?1是?0否(默認(rèn))

seaslog.buffer_size?=?100???????????????????????????????;buffer中緩沖數(shù)量?默認(rèn)0(不使用buffer_size)

seaslog.level?=?0???????????????????????????????????????;記錄日志級(jí)別?默認(rèn)0(所有日志)

seaslog.trace_error?=?1?????????????????????????????????;自動(dòng)記錄錯(cuò)誤?默認(rèn)1(開啟)

seaslog.trace_exception?=?0?????????????????????????????;自動(dòng)記錄異常信息?默認(rèn)0(關(guān)閉)

seaslog.default_datetime_format?=?"Y:m:d?H:i:s"?????????;日期格式配置?默認(rèn)"Y:m:d?H:i:s"

seaslog.appender?=?1????????????????????????????????????;日志存儲(chǔ)介質(zhì)?1File?2TCP?3UDP?(默認(rèn)為1)

seaslog.remote_host?=?127.0.0.1?????????????????????????;接收ip?默認(rèn)127.0.0.1?(當(dāng)使用TCP或UDP時(shí)必填)

seaslog.remote_port?=?514???????????????????????????????;接收端口?默認(rèn)514?(當(dāng)使用TCP或UDP時(shí)必填)

seaslog.disting_type = 1 開啟以type分文件,即log文件區(qū)分info\warn\erro

seaslog.disting_by_hour = 1 開啟每小時(shí)劃分一個(gè)文件

seaslog.use_buffer = 1 開啟buffer。默認(rèn)關(guān)閉。當(dāng)開啟此項(xiàng)時(shí),日志預(yù)存于內(nèi)存,當(dāng)請(qǐng)求結(jié)束時(shí)(或異常退出時(shí))一次寫入文件。

常量與函數(shù)

常量列表

*?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級(jí)別

string('info')??info級(jí)別

string('notice')?notice級(jí)別

*/

函數(shù)列表

SeasLog 提供了這樣一組函數(shù),可以方便地獲取與設(shè)置根目錄、模塊目錄、快速寫入與統(tǒng)計(jì)log。 相信從下述偽代碼的注釋中,您可以快速獲取函數(shù)信息,具體使用將緊接其后:


/**

*?@author?neeke@php.net

*?Date:?14-1-27?下午4:47

*/

class?SeasLog

{

public?function?__construct()

{

#SeasLog?init

}

public?function?__destruct()

{

#SeasLog?distroy

}

/**

*?設(shè)置basePath

*

*?@param?$basePath

*

*?@return?bool

*/

static?public?function?setBasePath($basePath)

{

return?TRUE;

}

/**

*?獲取basePath

*

*?@return?string

*/

static?public?function?getBasePath()

{

return?'the?base_path';

}

/**

*?設(shè)置模塊目錄

*?@param?$module

*

*?@return?bool

*/

static?public?function?setLogger($module)

{

return?TRUE;

}

/**

*?獲取最后一次設(shè)置的模塊目錄

*?@return?string

*/

static?public?function?getLastLogger()

{

return?'the?lastLogger';

}

/**

*?設(shè)置DatetimeFormat配置

*?@param?$format

*

*?@return?bool

*/

static?public?function?setDatetimeFormat($format)

{

return?TRUE;

}

/**

*?返回當(dāng)前DatetimeFormat配置格式

*?@return?string

*/

static?public?function?getDatetimeFormat()

{

return?'the?datetimeFormat';

}

/**

*?統(tǒng)計(jì)所有類型(或單個(gè)類型)行數(shù)

*?@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();

}

/**

*?以數(shù)組形式,快速取出某類型log的各行詳情

*

*?@param????????$level

*?@param?string?$log_path

*?@param?null???$key_word

*?@param?int????$start

*?@param?int????$limit

*?@param????????$order

*

*?@return?array

*/

static?public?function?analyzerDetail($level?=?SEASLOG_INFO,?$log_path?=?'*',?$key_word?=?NULL,?$start?=?1,?$limit?=?20,?$order?=?SEASLOG_DETIAL_ORDER_ASC)

{

return?array();

}

/**

*?獲得當(dāng)前日志buffer中的內(nèi)容

*

*?@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 Logger的使用(詳細(xì)文檔)

使用SeasLog進(jìn)行健康預(yù)警

預(yù)警的配置

[base]

wait_analyz_log_path?=?/log/base_test

[fork]

;是否開啟多線程?1開啟?0關(guān)閉

fork_open?=?1

;線程個(gè)數(shù)

fork_count?=?3

[warning]

email[smtp_host]?=?smtp.163.com

email[smtp_port]?=?25

email[subject_pre]?=?預(yù)警郵件?-

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點(diǎn)執(zhí)行

0?3?*?*?*?/path/to/php?/path/to/SeasLog/Analyzer/SeasLogAnalyzer.php

Demo:


/**

*?@author?ciogao@gmail.com

*?Date:?14-1-27?下午4:41

*/

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";

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,786評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,964評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,354評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,554評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,106評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,918評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,093評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,342評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評(píng)論 1 289
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,839評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,107評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,803評(píng)論 18 139
  • php-fig 1、FIG:PSR[0-4]代碼規(guī)范的得發(fā)明者、規(guī)范者,framework interoperab...
    湯華茂閱讀 521評(píng)論 0 0
  • =========================================================...
    lavor閱讀 3,503評(píng)論 0 5
  • sqlmap用戶手冊(cè) 說明:本文為轉(zhuǎn)載,對(duì)原文中一些明顯的拼寫錯(cuò)誤進(jìn)行修正,并標(biāo)注對(duì)自己有用的信息。 ======...
    wind_飄閱讀 2,074評(píng)論 0 5
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 當(dāng)給sq...
    xuningbo閱讀 10,382評(píng)論 2 22