SeasLog-1.5.6 發布,記憶體和IO最佳化版本,輕量高效的PHP日誌擴充。
改進日誌:
此次改進進行了記憶體穩定最佳化,和批量IO最佳化,本次版本將帶來更低的記憶體和IO消耗,稍後將發布效能測試報告。
- Fixed issue #76 #80 #86 Fixed segment fault with PHP7. - Make memory usage more stable, and clear memory leaks with PHP5.* and PHP7.*.
為什麼使用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):
那麼有沒有一種log類庫滿足以下需求呢:
-
分模組、分層級
-
配置簡單(最好是勿須配置)
-
日誌格式清晰易讀
-
應用簡單、效能很棒
SeasLog 正是應此需求而生。
目前提供了什麼
-
在PHP項目中便捷、規範地記錄log
-
可配置的預設log目錄與模組
-
指定log目錄與擷取當前配置
-
初步的分析預警架構
-
高效的日誌緩衝、便捷的緩衝debug
-
遵循 PSR-3 日誌介面規範
-
自動記錄錯誤資訊
-
自動記錄異常資訊
目標是怎樣的
-
便捷、規範的log記錄
-
高效的海量log分析
-
可配置、多途徑的log預警
安裝
編譯安裝 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 moduleextension = seaslog.soseaslog.default_basepath = /log/seaslog-test ;預設log根目錄seaslog.default_logger = default ;預設logger目錄seaslog.disting_type = 1 ;是否以type分檔案 1是 0否(預設)seaslog.disting_by_hour&nnbsp;= 1 ;是否每小時劃分一個檔案 1是 0否(預設)seaslog.use_buffer = 1 ;是否啟用buffer 1是 0否(預設)seaslog.buffer_size = 100 ;buffer中緩衝數量 預設0(不使用buffer_size)seaslog.level = 0 ;記錄記錄層級 預設0(所有日誌)seaslog.trace_error = 1 ;自動記錄錯誤 預設1(開啟)seaslog.trace_exception = 0 ;自動記錄異常資訊 預設0(關閉)seaslog.default_datetime_format = "%Y:%m:%d %H:%M:%S" ;日期格式配置 預設"%Y:%m:%d %H:%M:%S"
seaslog.disting_type = 1 開啟以type分檔案,即log檔案區分info\warn\erro
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。 相信從下述虛擬碼的注釋中,您可以快速擷取函數資訊,具體使用將緊接其後:
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.comemail[smtp_port] = 25email[subject_pre] = 預警郵件 -email[smtp_user] = seaslogdemo@163.comemail[smtp_pwd] = seaslog#demoemail[mail_from] = seaslogdemo@163.comemail[mail_to] = gaochitao@weiboyi.comemail[mail_cc] = ciogao@gmail.comemail[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/bbtest1[level] = SEASLOG_ERRORtest1[bar] = 1test1[mail_to] = gaochitao@weiboyi.comtest2[module] = 222test2[level] = SEASLOG_WARNINGtest3[module] = 333test3[level] = SEASLOG_CRITICALtest4[module] = 444test4[level] = SEASLOG_EMERGENCYtest5[module] = 555test5[level] = SEASLOG_DEBUG
crontab配置
;每天淩晨3點執行0 3 * * * /path/to/php /path/to/SeasLog/Analyzer/SeasLogAnalyzer.php
Demo:
'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";