PHP擴充套件高效能日誌系統SeasLog簡單上手

不該相遇在秋天發表於2017-09-14

 


Windows部分:
--------------------------------------------------------

https://pecl.php.net/package/SeasLog/1.6.9/windows

根據PHP版本 是否執行緒安全 進行選擇 這些都可以在phpinfo裡查得到

 

下載之後 把裡面的php_seaslog.dll拷貝到PHP的安裝目錄下的ext裡

 

然後開啟php.ini進行配置

extension=php_seaslog.dll

 

 


Linux部分:
------------------------------------------------------------
下載地址 https://pecl.php.net/package/seaslog

將包用ftp傳到Linux上 然後移走
mv SeasLog-1.6.9.tgz /usr/local/SeasLog.tgz

 

進入目錄解壓
cd /usr/local
tar -zxvf SeasLog.tgz

 

 

執行PHP安裝目錄下的phpize
/usr/local/php7/bin/phpize

 

搜尋php-config路徑
find /usr/local/php7/ -name php-config
得到/usr/local/php7/bin/php-config

 

配置
./configure --with-php-config=/usr/local/php7/bin/php-config

 

編譯
make

 

安裝
make install

出現Installing shared extensions: /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/
則成功

 

開啟php.ini進行配置
找到一排extension的地方 加上extension=seaslog.so

 

 

 

公共部分:
---------------------------------------------------------------
在php.ini中 extension下面接著配置以下資訊:

 

seaslog.default_basepath = 'D:/WWW/log' ;預設log根目錄 記著 是目錄
seaslog.default_logger = default ;預設日誌目錄 位於default_basepath目錄下的小目錄
seaslog.disting_type = 1 ;是否以type分檔案 1是 0否(預設) 若是 則每種級別都會單獨生成日誌檔案
seaslog.disting_by_hour = 0 ;是否每小時劃分一個檔案 1是 0否(預設) 若是 則每個小時都會生成新檔案
seaslog.use_buffer = 1 ;是否啟用buffer 1是 0否(預設) 預設關閉,當開啟此項時,日誌預存於記憶體,當請求結束時(或異常退出時)一次寫入檔案。
seaslog.buffer_size = 100 ;buffer中緩衝數量 預設0(不使用)
seaslog.level = 0 ;記錄日誌級別 預設0(所有日誌)

 

第二條配置seaslog.default_logger我選擇在專案的入口檔案中再指定Seaslog::setLogger('...')
這樣就可以每個專案一個日誌目錄了

 

SeasLog 日誌8個級別
debug -> info -> notice -> warning -> error -> critical -> alert -> emergency

 

儲存退出 重啟Apache 打個phpinfo()出來找找有沒有SeasLog擴充套件

 

 


以下是PHP中的seaslog函式:

 

basepath
設定:Seaslog::setBasePath('/log/base_test');
獲取:Seaslog::getBasePath();

 

logger
設定:Seaslog::setLogger('app');
獲取:Seaslog::getLastLogger();

 

寫日誌:
Seaslog::debug('...')
Seaslog::info('...')
Seaslog::notice('...')
八個級別都可以記錄

日誌內容格式為:級別-pid-時間戳-格式化時間-日誌內容

 

讀取日誌條數
Seaslog::analyzerCount('{日誌級別}');//如果不填引數 則代表統計全部級別
Seaslog::analyzerCount('{日誌級別}','20170914');指定統計某一天的日誌

 

讀取日誌
Seaslog::analyzerDetail('{日誌級別}','20170914');//也有兩個引數 日誌級別和指定時間 第一個日誌級別引數必填 時間可選

 

 

輸出info級別的日誌:
echo "<pre>";
print_r(Seaslog::analyzerDetail('info'));
echo "</pre>";

 


某些PHP框架預設為當前控制器名稱空間 所以會報Seaslog not found
只需在前面指定根名稱空間就OK: \Seaslog::debug('...')

 

相關文章