SeasLog-1.5.6 發布,記憶體IO最佳化版本的PHP日誌擴充

來源:互聯網
上載者:User
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";
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.