高效能的PHP日誌系統 SeasLog
參考文件:http://neeke.github.io/SeasLog/
什麼是SeasLog
SeasLog是一個C語言編寫的PHP擴充套件,提供一組規範標準的功能函式,在PHP專案中方便、規範、高效地寫日誌,以及快速地讀取和查詢日誌。
一.什麼是日誌系統
1. 記錄系統執行時的資訊
2. 系統日誌、應用程式日誌、安全日誌
3. 日誌功能不應該影響到使用者的正常使用
二.為什麼需要日誌功能
1. 瞭解系統執行情況
2. 記錄使用者操作資訊
3. 收集資料
三.為什麼選擇SeasLog
1. 高效能(C語言做的 先將日誌寫入記憶體達到一定量再寫入檔案比頻繁寫入檔案好)。
2. 無需配置
3. 功能完善、
4. 使用簡單
四.安裝SeasLog
1.首先要下載SeasLog
$lastLogger_1 = SeasLog::getLastLogger(); SeasLog::setLogger('testModule/app1'); $lastLogger_2 = SeasLog::getLastLogger();
2.在windows系統配置SeasLog
找到適合自己php版本的seaslog.dll,將 php_seaslog.dll放在php安裝目錄的的ext下面
修改php.ini的配置,並增加應的引數配置
seaslog.disting_type = 1
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時,所有日誌均不記錄
儲存php.ini並且重新伺服器語言,然後執行phpinfo();可以看到
五.SeasLog Logger的使用
1.獲取與設定basePath
$basePath_1=SeasLog::getBasePath();SeasLog::setBasePath('/log/base_test');$basePath_2=SeasLog::getBasePath();直接使用 SeasLog::getBasePath()
,將獲取php.ini(seaslog.ini)中設定的seaslog.default_basepath
的值。
使用 SeasLog::setBasePath()
函式,將改變 SeasLog::getBasePath()
的取值。
2.設定logger與獲取lastLogger
$lastLogger_1 = SeasLog::getLastLogger(); SeasLog::setLogger('testModule/app1'); $lastLogger_2 = SeasLog::getLastLogger();
與basePath相類似的,
直接使用 SeasLog::getLastLogger()
,將獲取php.ini(seaslog.ini)中設定的seaslog.default_logger
的值。
使用 SeasLog::setLogger()
函式,將改變 SeasLog::getLastLogger()
的取值。
3.快速寫入log
上面已經設定過了basePath與logger,於是log記錄的目錄已經產生了,
log記錄目錄 = basePath / logger / {fileName}.log log檔名,以
年月日
分檔案,如今天是2014年02月18日期,那麼{fileName}
=20140218
;
還記得 php.ini
中設定的 seaslog.disting_type
嗎?
預設的 seaslog.disting_type = 0
,如果今天我使用了 SeasLog
,那麼將產生最終的log檔案:
- LogFile = basePath / logger / 20140218.log
- log格式統一為:
{type} | {pid} | {timeStamp} |{dateTime} | {logInfo}
<?php
SeasLog::setBasePath('E:www/seaslog/log/base_test');
SeasLog::info('this is a info');
?>
seaslog.disting_type = 0 產生檔案 20160224.log
seaslog.disting_type = 1 , seaslog.disting_by_hour = 0 產生檔案 info.20160224.log
seaslog.disting_type = 1 , seaslog.disting_by_hour = 1 產生檔案 info.2016022411.log 開啟檔案顯示: log格式統一為: {type} | {pid} | {timeStamp} |{dateTime}
| {logInfo}
info | 10144 | 1456283442.408 | 2016:02:24 11:10:42 | this is a info 4.常量列表
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"
var_dump(SEASLOG_DEBUG,SEASLOG_INFO,SEASLOG_NOTICE);
/*
string('debug') debug級別
string('info') info級別
string('notice') notice級別
*/
5.SeasLog Analyzer的使用
快速統計某型別log的count值
SeasLog
在擴充套件中使用管道呼叫shell命令 grep
-wc
快速地取得count值,並返回值(array || int)給PHP。
$countResult_1 = SeasLog::analyzerCount(); $countResult_2 = SeasLog::analyzerCount(SEASLOG_WARNING); $countResult_3 = SeasLog::analyzerCount(SEASLOG_ERROR,date('Ymd',time()));例子:
<span style="font-size:18px;"><?php
SeasLog::setBasePath('E:www/seaslog/log/base_test');
SeasLog::log(SEASLOG_ERROR,'this is a error test by ::log');
SeasLog::debug('this is a {userName} debug',array('{userName}' => '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'));
?></span>
執行:
<span style="font-size:18px;"><?php </span>
<span style="font-size:18px;">$data = SeasLog::analyzerCount();
print_r($data);
echo "<br/>";
$data1 = SeasLog::analyzerCount(SEASLOG_WARNING);
print_r($data1);
echo "<br/>";
$data2 = SeasLog::analyzerCount(SEASLOG_ERROR,date('Ymd',time()));
print_r($data2);
echo "<br/>";</span>
<span style="font-size:18px;">?></span>
輸出:
Array ( [debug] => 2 [info] => 2 [notice] => 2 [warning] => 2 [error] => 4 [critical] => 2 [alert] => 2 [emergency] => 2 ) 2
4
獲取某型別log列表
SeasLog
在擴充套件中使用管道呼叫shell命令 grep
-w
快速地取得列表,並返回array給PHP
執行:
$detailErrorArray_inAll = SeasLog::analyzerDetail(SEASLOG_ERROR);
$detailErrorArray_today = SeasLog::analyzerDetail(SEASLOG_ERROR,date('Ymd',time()));
echo "<pre>";
print_r($detailErrorArray_inAll);
echo "</pre>";
echo "<pre>";
print_r($detailErrorArray_today);
echo "</pre>";
輸出:
SeasLog::analyzerDetail(SEASLOG_ERROR,date('Ymd',time())); 只取得當前模組下,當前一天內,level為SEASLOG_ERROR 的資訊列表:
同理,取當月 $detailErrorArray_mouth = SeasLog::analyzerDetail(SEASLOG_ERROR,date('Ym',time()));
使用SeasLog進行健康預警
預警的配置
[base]
wait_analyz_log_path = /log/base_test
[fork]
;是否開啟多執行緒 1開啟 0關閉
fork_open = 1
;執行緒個數
fork_count = 3
[warning]
email[smtp_host] = smtp.163.com
email[smtp_port] = 25
email[subject_pre] = 預警郵件 -
email[smtp_user] = [email protected]
email[smtp_pwd] = seaslog#demo
email[mail_from] = [email protected]
email[mail_to] = [email protected]
email[mail_cc] = [email protected]
email[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/bb
test1[level] = SEASLOG_ERROR
test1[bar] = 1
test1[mail_to] = [email protected]
test2[module] = 222
test2[level] = SEASLOG_WARNING
test3[module] = 333
test3[level] = SEASLOG_CRITICAL
test4[module] = 444
test4[level] = SEASLOG_EMERGENCY
test5[module] = 555
test5[level] = SEASLOG_DEBUG
crontab配置
;每天凌晨3點執行
0 3 * * * /path/to/php /path/to/SeasLog/Analyzer/SeasLogAnalyzer.php
相關推薦
高效能的PHP日誌系統 SeasLog
參考文件:http://neeke.github.io/SeasLog/ 什麼是SeasLog SeasLog是一個C語言編寫的PHP擴充套件,提供一組規範標準的功能函式,在PHP專案中方便、規範、高效地寫日誌,以及快速地讀取和查詢日誌。 一.什麼是日誌系統 1. 記
php日誌擴充套件 seasLog
https://github.com/SeasX/SeasLog/blob/master/README_zh.md PECL安裝SeasLog $ pecl install seaslog seaslog.ini的配置 [SeasLog] ;configuratio
打造高效能日誌系統
前言 說起日誌系統, 大家都不陌生, 每次線上出了問題, 大家通常都會第一時間抓log回來進行分析, 很多時候這些log是我們恢復現場的重要途徑也可能成為了唯一手段, 所以重要性不言而喻. 市面上的開源日誌系統有很多, 如log4cxx, log4cpp, glog等
PHP執行系統命令的有幾個常用的函數
exe 自動 文件操作 nal 外部命令 中間 ring 打開 lcm PHP執行系統命令的有幾個常用的函數,如有:system函數、exec函數、popen函數,passthru,shell_exec函數他們都可以執行系統命令,不過前提時必須系統給了權限了哦。 syste
PHP 執行系統外部命令 system() exec() passthru()
dsl 時有 輸出 處理 介紹 要花 區別 safe function PHP中調用外部命令,可以用如下三種方法來實現: 方法一:用PHP提供的專門函數(四個): PHP提供4個專門的執行外部命令的函數:exec(), system(), passthru
Tomcat日誌系統詳解
mat core catalina res 最大的 tor dumps 異常 startup 綜合:Tomcat下相關的日誌文件 catalina引擎的日誌文件,文件名:catalina.日期.log Tomcat下內部代碼丟出的日誌,文件名localhost.日期.lo
Spring Boot入門第三天:配置日誌系統和Druid數據庫連接池。
禁用 css ret 輸入 ogg servlet log http gif 一、日誌管理 1.在application.properties文件中加入如下內容: logging.level.root=WARN logging.level.org.springfram
PHP 執行系統外部命令的方法 system() exec()
命令結果 所有 最後一行 之前 ech 返回結果 mman 程序 arr PHP作為一種服務器端的腳本語言,像編寫簡單、或者是復雜的動態網頁這樣的任務,它完全能夠勝任。但事情不總是如此,有時為了實現某個功能,必須借助於操作系統的外部程序(或者稱之為命令),這樣可以做到事半功
CentOS 6 添加php-fpm系統服務
restart 生成 kill -9 tar usr kcon amp -h ini 簡介: php-fpm安裝完成後默認不會註冊為系統服務,所以需要手工添加系統服務腳本。在/etc/init.d目錄下新建php-fpm文件,並更改權限其即可。 1、檢測/usr/
第二十三周微職位elk日誌系統
elk+nginx日誌系統利用ELK+redis搭建一套nginx日誌分析平臺。logstash,elasticsearch,kibana 怎麽進行nginx的日誌分析呢?首先,架構方面,nginx是有日誌文件的,它的每個請求的狀態等都有日誌文件進行記錄。其次,需要有個隊列,redis的list結構正好可以作
Javaweb日誌系統
部署 項目管理工具 管理 配置 att 項目 ica sym nbsp 1.SLF4J SLF4J,即簡單日誌門面(Simple Logging Facade for Java),不是具體的日誌解決方案,它只服務於各種各樣的日誌系統。按照官方的說法,SLF4J是一個用於日誌
部署 Graylog 日誌系統 - 每天5分鐘玩轉 Docker 容器技術(92)
docker 教程 容器 Graylog 是與 ELK 可以相提並論的一款集中式日誌管理方案,支持數據收集、檢索、可視化 Dashboard。本節將實踐用 Graylog 來管理 Docker 日誌。Graylog 架構Graylog 架構如下圖所示:Graylog 負責接收來自各種設備和應用的日
日誌系統
進行 5.5.0 worker stdout 時區 小時 存儲 match 基本用法 從ELK到EFK演進 背景 作為中國最大的在線教育站點,目前滬江日誌服務的用戶包含網校,交易,金融,CCTalk 等多個部門的多個產品的日誌搜索分析業務,每日產生的各類日誌有好十幾
.NET下使用 Seq結構化日誌系統
eof 檢索 fig 直連 自定義 兩個 img 性能 collect 前言 我們公司在日誌管理方面一直沒有統一,主要痛點有: 每個開發人員都是各用各的,存儲日誌的形式也是五花八門,如:本地文件,數據庫,Redis,MongoDB 由於公司訪問服務器要通過堡壘機
graylog 2.3.2 日誌系統安裝指南
graylog cnop Java (>= 8)MongoDB 3.2Elasticsearch 2.Xgraylog 2.3.2IP 192.168.0.210centos 7.xIP 192.168.0.210 (單機測試) 結構:mongodb + elasticsearch + gra
數據庫日誌系統分解
mysql 日誌標題索引日誌分類日誌操作日誌分解日誌分類 在數據庫系統中日誌主要分為6類,具體如下: 1、查詢日誌:主要記錄日常查詢的記錄; 2、慢查詢日誌:主要記錄查詢時長超過設置的數值時間的語句,方便DBA運維人員進行查詢; 3、錯誤日誌:主要用於記錄錯誤的事件,方便DBA運維人員
記錄日誌系統ELKB 5.6.4的搭建過程
logstash elk stack 集中式日誌系統 前言ELK是最近比較流行的免費的日誌系統解決方案,註意,ELK不是一個軟件名,而是一個結局方案的縮寫,即Elasticsearch+Logstash+Kibana(ELK Stack),其中Logstash負責日誌的采集和過濾,Elastics
centos7 部署 ELK 日誌系統
stash 修改配置 ali 分享 install .cn data entos 生產環境 =============================================== 2017/12/17_第1次修改 ccb
Slf4j與其他日誌系統兼容的使用
console 項目 load 循環 bridge 1.2 關於 重新 順序 java生產的各種框架(如spring等)裏各個框架會使用不同的日誌體系,多個不同日誌在一個jvm裏混搭會出現一定問題 ,這裏梳理一下java體系裏常見的日誌框架,以SFL4j為中心介紹下跟各個日
基於面部識別的日誌系統的設計與實現
history 教訓 並且 else -o 經驗 文件 self 線程 基於面部識別的日誌系統的設計與實現 @(GUI程序開發)[PyQt, 信號, 面部識別, 多線程, 媒體播放, opencv] [TOC] 需求與設計 使用面部識別技術,識別進出重要通道的人員,並對