中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用SeasLog打造PHP項目中的高性能日志組件(一)

發布時間:2020-07-24 02:44:18 來源:網絡 閱讀:468 作者:yunzhihui 欄目:web開發

 云智慧(北京)科技有限公司 高馳濤

 

什么是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的性能非常差。

這是log4php與SeasLog的性能對比圖:

使用SeasLog打造PHP項目中的高性能日志組件(一)

設計思路

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

·分模塊、分級別

·配置簡單(最好是勿須配置)

·日志格式清晰易讀

·應用簡單、性能很棒

我們知道,PSR-3標準是一個國際化的日志標準,它要求了模塊、級別、清晰、易用等日志工作應具備的特點。因此,只要我們遵循了PSR-3標準,則我們可以完成分模塊、分級別以及日志格式清晰易讀的要求。

配置簡單這個需求也很好完成。如果嚴格按照既定規則,其實只需要設置默認目錄就可以了。

 

OK,現在我們只剩下性能這一個要求。

既然是日志,免不了會寫文件,或者通過pipe通過網絡傳送到某個存儲中心(我們暫不考慮存儲中心的設計)。可以想見,假設一個請求中需要寫出1000log,那么勢必會有1000IO,這對性能將是一個很大的拖延點。一般對于處理這種多次相同的請求場景,我們要解決的其實也很簡單,使用cachebuffer,把多次請求作歸并,從而降低對磁盤或網絡的IO,這是一個基本的思想。

SeasLog也是這么做的。設定一個buffer_size(默認100log),使用PHP請求內存,每寫一次log,塞入內存,同時buffer_size加;當buffer_size等于設置值時,則進行一次IO,同時清除buffer; 當然,如果請求結束了、或執行了dieexit或其他異常退出時,不管buffer_size有沒有攢夠設置值,立刻進行一次IO,同時清除buffer

 

到目前為止,SeasLog的正式版本為1.1.6,采用Apache 2.0開源協議,同時可以在php.net官方,和Github庫上獲得它的完整代碼。

Php.net     http://pecl.php.net/package/seaslog

Github      https://github.com/Neeke/SeasLog

目前提供了什么

·在PHP項目中便捷、規范地記錄log

·可配置的默認log目錄與模塊

·指定log目錄與獲取當前配置

·初步的分析預警框架

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

·遵循 PSR-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文件區分info\warn\erro

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時,所有日志均不記錄。

 

默認常量有哪些

遵循PSR-3標準,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),云智慧高級架構師,PHP開發組成員,同時也是PECL/SeasLog等多個開源軟件作者與貢獻者。8年研發管理經驗,早期從事大規模企業信息化研發架構,09年涉足互聯網數字營銷領域并深入研究架構與性能優化。對高并發、高性能、高可用系統設計實現有豐富經驗。崇尚規范、敏捷、高效、GettingReal。目前在云智慧致力于APM產品的架構與研發。主要負責PHP、Python、Go等語言的底層擴展與SmartAgent的架構研發。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌兰浩特市| 茂名市| 天津市| 桐乡市| 水富县| 前郭尔| 禄劝| 金昌市| 太保市| 巴林右旗| 洪洞县| 龙井市| 泗阳县| 陵川县| 岢岚县| 普格县| 嘉善县| 乃东县| 当涂县| 仪陇县| 西吉县| 北票市| 郯城县| 云安县| 丹棱县| 尼勒克县| 红桥区| 大化| 军事| 寿阳县| 临潭县| 秦安县| 禄丰县| 南澳县| 鄂托克旗| 五原县| 白朗县| 泸溪县| 涿州市| 琼海市| 景东|