### 簡介
#### 什么是SeasLog
SeasLog是一個C語言編寫的PHP擴展,提供一組規范標準的功能函數,在PHP項目中方便、規范、高效地寫日志,以及快速地讀取和查詢日志。
#### 為什么使用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): SeasLogVSlog4php

那么有沒有一種log類庫滿足以下需求呢:
* 分模塊、分級別
* 配置簡單(最好是勿須配置)
* 日志格式清晰易讀
* 應用簡單、性能很棒
SeasLog 正是應此需求而生。
目前提供了什么
1. 在PHP項目中便捷、規范地記錄log
2. 可配置的默認log目錄與模塊
3. 指定log目錄與獲取當前配置
4. 初步的分析預警框架
5. 高效的日志緩沖、便捷的緩沖debug
6. 遵循 PSR-3 日志接口規范
7. 自動記錄錯誤信息
8. 自動記錄異常信息
9. 連接TCP端口,以RFC5424格式發送日志
10. 連接UDP端口,以RFC5424格式發送日志
11. 支持RequestId區分請求
12. 支持日志模板自定義
目標是怎樣的
* 便捷、規范的log記錄
* 高效的海量log分析
* 可配置、多途徑的log預警
#### 性能要求
既然是日志,免不了會寫文件,或者通過pipe通過網絡傳送到某個存儲中心(我們暫不考慮存儲中心的設計)。可以想見,假設一個請求中需要寫出1000處log,那么勢必會有1000次IO,這對性能將是一個很大的拖延點。一般對于處理這種多次相同的請求場景,我們要解決的其實也很簡單,使用cache或buffer,把多次請求作歸并,從而降低對磁盤或網絡的IO,這是一個基本的思想。
SeasLog也是這么做的。設定一個buffer_size(默認100條log),使用PHP請求內存,每寫一次log,塞入內存,同時buffer_size加;當buffer_size等于設置值時,則進行一次IO,同時清除buffer; 當然,如果請求結束了、或執行了die、exit或其他異常退出時,不管buffer_size有沒有攢夠設置值,立刻進行一次IO,同時清除buffer。
到目前為止,SeasLog的正式版本,采用Apache 2.0開源協議,同時可以在php.net官方,和Github庫上獲得它的完整代碼。
[Php.net](http://pecl.php.net/package/seaslog)
[Github](https://github.com/Neeke/SeasLog)