網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,成都做網(wǎng)站公司-創(chuàng)新互聯(lián)建站已向上千多家企業(yè)提供了,網(wǎng)站設(shè)計,網(wǎng)站制作,網(wǎng)絡(luò)營銷等服務(wù)!設(shè)計與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗,合理的價格為您打造企業(yè)品質(zhì)網(wǎng)站。
SeasLog是一個C語言編寫的PHP擴展,提供一組規(guī)范標(biāo)準(zhǔn)的功能函數(shù),在PHP項目中方便、規(guī)范、高效地寫日志,以及快速地讀取和查詢?nèi)罩尽?/p>
無論在什么應(yīng)用中,log日志都是架構(gòu)中不可缺少的一個重要組成部分,它通常是系統(tǒng)或軟件、應(yīng)用的運行記錄。通過log的分析,可以方便用戶了解系統(tǒng)或軟件、應(yīng)用的運行情況;如果你的應(yīng)用log足夠豐富,也可以分析以往用戶的操作行為、類型喜好、地域分布或其他更多信息;如果一個應(yīng)用的log同時也分了多個級別,那么可以很輕易地分析得到該應(yīng)用的健康狀況,及時發(fā)現(xiàn)問題并快速定位、解決問題,補救損失。
我們知道,php內(nèi)置了很多l(xiāng)og函數(shù),如error_log、syslog、file_put_content,這些函數(shù)功能強大且性能極好,但由于各種缺陷(error_log、file_put_content無錯誤級別、無固定格式像是信馬由韁隨處亂畫;syslog不區(qū)分模塊、而且與系統(tǒng)日志混合,讀syslog記錄會讓人抓狂的。),靈活度降低了很多,很不能滿足應(yīng)用需求?;旧纤械拈_發(fā)者,都會自行設(shè)計封裝log庫,當(dāng)然也會有很多開發(fā)者選擇已有的開源日志庫。
也有很多開源log類庫彌補了上述缺陷,如log4php、plog、Analog等(當(dāng)然也有很多應(yīng)用在項目中自己開發(fā)的log類)。其中以log4php最為著名,它的設(shè)計精良、格式完美、文檔完善、功能強大。但是經(jīng)過測試,log4php的性能非常差。
這是log4php與SeasLog的性能對比圖:
那么有沒有一種log類庫同時滿足以下需求呢:
·分模塊、分級別
·配置簡單(最好是勿須配置)
·日志格式清晰易讀
·應(yīng)用簡單、性能很棒
我們知道,PSR-3標(biāo)準(zhǔn)是一個國際化的日志標(biāo)準(zhǔn),它要求了“模塊、級別、清晰、易用”等日志工作應(yīng)具備的特點。因此,只要我們遵循了PSR-3標(biāo)準(zhǔn),則我們可以完成“分模塊、分級別”以及“日志格式清晰易讀”的要求。
“配置簡單”這個需求也很好完成。如果嚴(yán)格按照既定規(guī)則,其實只需要設(shè)置默認(rèn)目錄就可以了。
OK,現(xiàn)在我們只剩下“性能”這一個要求。
既然是日志,免不了會寫文件,或者通過pipe通過網(wǎng)絡(luò)傳送到某個存儲中心(我們暫不考慮存儲中心的設(shè)計)。可以想見,假設(shè)一個請求中需要寫出1000處log,那么勢必會有1000次IO,這對性能將是一個很大的拖延點。一般對于處理這種多次相同的請求場景,我們要解決的其實也很簡單,使用cache或buffer,把多次請求作歸并,從而降低對磁盤或網(wǎng)絡(luò)的IO,這是一個基本的思想。
SeasLog也是這么做的。設(shè)定一個buffer_size(默認(rèn)100條log),使用PHP請求內(nèi)存,每寫一次log,塞入內(nèi)存,同時buffer_size加;當(dāng)buffer_size等于設(shè)置值時,則進行一次IO,同時清除buffer; 當(dāng)然,如果請求結(jié)束了、或執(zhí)行了die、exit或其他異常退出時,不管buffer_size有沒有攢夠設(shè)置值,立刻進行一次IO,同時清除buffer。
到目前為止,SeasLog的正式版本為1.1.6,采用Apache 2.0開源協(xié)議,同時可以在php.net官方,和Github庫上獲得它的完整代碼。
Php.net http://pecl.php.net/package/seaslog
Github https://github.com/Neeke/SeasLog
·在PHP項目中便捷、規(guī)范地記錄log
·可配置的默認(rèn)log目錄與模塊
·指定log目錄與獲取當(dāng)前配置
·初步的分析預(yù)警框架
·高效的日志緩沖、便捷的緩沖debug
·遵循 PSR-3 日志接口規(guī)范
獲得源碼后,可自行編譯。
$ /path/to/phpize
$ ./configure --with-php-config=/path/to/php-config
$ make && make install
當(dāng)然,使用PECL管理工具會更方便:
$ pecl install seaslog
; 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 ;是否每小時劃分一個文件 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 ;記錄日志級別 默認(rèn)0(所有日志)
seaslog.disting_type = 1 開啟以type分文件,即log文件區(qū)分info\warn\erro
seaslog.disting_by_hour = 1 開啟每小時劃分一個文件
seaslog.use_buffer = 1 開啟buffer。默認(rèn)關(guān)閉。當(dāng)開啟此項時,日志預(yù)存于內(nèi)存,當(dāng)請求結(jié)束時(或異常退出時)一次寫入文件。
seaslog.buffer_size = 100 設(shè)置緩沖數(shù)量為100. 默認(rèn)為0,即無緩沖數(shù)量限制.當(dāng)buffer_size大于0時,緩沖量達到該值則寫一次文件.
seaslog.level = 3 記錄的日志級別.默認(rèn)為0,即所有日志均記錄。當(dāng)level為1時,關(guān)注debug以上級別(包括debug),以此類推。level大于8時,所有日志均不記錄。
遵循PSR-3標(biāo)準(zhǔn),SeasLog 共將日志分成8個級別
·SEASLOG_DEBUG "debug"
·SEASLOG_INFO "info"
·SEASLOG_NOTICE "notice"
·SEASLOG_WARNING "warning"
·SEASLOG_ERROR "error"
·SEASLOG_CRITICAL "critical"
·SEASLOG_ALERT "alert"
·SEASLOG_EMERGENCY "emergency"
高馳濤(Neeke),云智慧高級架構(gòu)師,PHP開發(fā)組成員,同時也是PECL/SeasLog等多個開源軟件作者與貢獻者。8年研發(fā)管理經(jīng)驗,早期從事大規(guī)模企業(yè)信息化研發(fā)架構(gòu),09年涉足互聯(lián)網(wǎng)數(shù)字營銷領(lǐng)域并深入研究架構(gòu)與性能優(yōu)化。對高并發(fā)、高性能、高可用系統(tǒng)設(shè)計實現(xiàn)有豐富經(jīng)驗。崇尚規(guī)范、敏捷、高效、GettingReal。目前在云智慧致力于APM產(chǎn)品的架構(gòu)與研發(fā)。主要負責(zé)PHP、Python、Go等語言的底層擴展與SmartAgent的架構(gòu)研發(fā)。