PHP日誌處理類
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
/**
* 日誌處理類
* @category Think
* @package Think
* @subpackage Core
* @author liu21st <liu21st@gmail.com>
*/
class Log {
// 日誌級別 從上到下,由低到高
const EMERG = 'EMERG'; // 嚴重錯誤: 導致系統崩潰無法使用
const ALERT = 'ALERT'; // 警戒性錯誤: 必須被立即修改的錯誤
const CRIT = 'CRIT'; // 臨界值錯誤: 超過臨界值的錯誤,例如一天24小時,而輸入的是25小時這樣
const ERR = 'ERR'; // 一般錯誤: 一般性錯誤
const WARN = 'WARN'; // 警告性錯誤: 需要發出警告的錯誤
const NOTICE = 'NOTIC'; // 通知: 程式可以執行但是還不夠完美的錯誤
const INFO = 'INFO'; // 資訊: 程式輸出資訊
const DEBUG = 'DEBUG'; // 除錯: 除錯資訊
const SQL = 'SQL'; // SQL:SQL語句 注意只在除錯模式開啟時有效
// 日誌記錄方式
const SYSTEM = 0;
const MAIL = 1;
const TCP = 2;
const FILE = 3;
// 日誌資訊
static $log = array();
// 日期格式
static $format = '[ c ]';
/**
* 記錄日誌 並且會過濾未經設定的級別
* @static
* @access public
* @param string $message 日誌資訊
* @param string $level 日誌級別
* @param boolean $record 是否強制記錄
* @return void
*/
static function record($message,$level=self::ERR,$record=false) {
if($record || false!== strpos(C('LOG_RECORD_LEVEL'),$level)) {
$now = date(self::$format);
self::$log[] = "{$now} {$level}: {$message}\r\n";
}
}
/**
* 日誌儲存
* @static
* @access public
* @param integer $type 日誌記錄方式
* @param string $destination 寫入目標
* @param string $extra 額外引數
* @return void
*/
static function save($type=self::FILE,$destination='',$extra='') {
if(empty($destination))
$destination = LOG_PATH.date('y_m_d').".log";
if(self::FILE == $type) { // 檔案方式記錄日誌資訊
//檢測日誌檔案大小,超過配置大小則備份日誌檔案重新生成
if(is_file($destination) && floor(C('LOG_FILE_SIZE')) <= filesize($destination) )
rename($destination,dirname($destination).'/'.time().'-'.basename($destination));
}
error_log(implode("",self::$log), $type,$destination ,$extra);
// 儲存後清空日誌快取
self::$log = array();
//clearstatcache();
}
/**
* 日誌直接寫入
* @static
* @access public
* @param string $message 日誌資訊
* @param string $level 日誌級別
* @param integer $type 日誌記錄方式
* @param string $destination 寫入目標
* @param string $extra 額外引數
* @return void
*/
static function write($message,$level=self::ERR,$type=self::FILE,$destination='',$extra='') {
$now = date(self::$format);
if(empty($destination))
$destination = LOG_PATH.date('y_m_d').".log";
if(self::FILE == $type) { // 檔案方式記錄日誌
//檢測日誌檔案大小,超過配置大小則備份日誌檔案重新生成
if(is_file($destination) && floor(C('LOG_FILE_SIZE')) <= filesize($destination) )
rename($destination,dirname($destination).'/'.time().'-'.basename($destination));
}
error_log("{$now} {$level}: {$message}\r\n", $type,$destination,$extra );
//clearstatcache();
}
}
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
/**
* 日誌處理類
* @category Think
* @package Think
* @subpackage Core
* @author liu21st <liu21st@gmail.com>
*/
class Log {
// 日誌級別 從上到下,由低到高
const EMERG = 'EMERG'; // 嚴重錯誤: 導致系統崩潰無法使用
const ALERT = 'ALERT'; // 警戒性錯誤: 必須被立即修改的錯誤
const CRIT = 'CRIT'; // 臨界值錯誤: 超過臨界值的錯誤,例如一天24小時,而輸入的是25小時這樣
const ERR = 'ERR'; // 一般錯誤: 一般性錯誤
const WARN = 'WARN'; // 警告性錯誤: 需要發出警告的錯誤
const NOTICE = 'NOTIC'; // 通知: 程式可以執行但是還不夠完美的錯誤
const INFO = 'INFO'; // 資訊: 程式輸出資訊
const DEBUG = 'DEBUG'; // 除錯: 除錯資訊
const SQL = 'SQL'; // SQL:SQL語句 注意只在除錯模式開啟時有效
// 日誌記錄方式
const SYSTEM = 0;
const MAIL = 1;
const TCP = 2;
const FILE = 3;
// 日誌資訊
static $log = array();
// 日期格式
static $format = '[ c ]';
/**
* 記錄日誌 並且會過濾未經設定的級別
* @static
* @access public
* @param string $message 日誌資訊
* @param string $level 日誌級別
* @param boolean $record 是否強制記錄
* @return void
*/
static function record($message,$level=self::ERR,$record=false) {
if($record || false!== strpos(C('LOG_RECORD_LEVEL'),$level)) {
$now = date(self::$format);
self::$log[] = "{$now} {$level}: {$message}\r\n";
}
}
/**
* 日誌儲存
* @static
* @access public
* @param integer $type 日誌記錄方式
* @param string $destination 寫入目標
* @param string $extra 額外引數
* @return void
*/
static function save($type=self::FILE,$destination='',$extra='') {
if(empty($destination))
$destination = LOG_PATH.date('y_m_d').".log";
if(self::FILE == $type) { // 檔案方式記錄日誌資訊
//檢測日誌檔案大小,超過配置大小則備份日誌檔案重新生成
if(is_file($destination) && floor(C('LOG_FILE_SIZE')) <= filesize($destination) )
rename($destination,dirname($destination).'/'.time().'-'.basename($destination));
}
error_log(implode("",self::$log), $type,$destination ,$extra);
// 儲存後清空日誌快取
self::$log = array();
//clearstatcache();
}
/**
* 日誌直接寫入
* @static
* @access public
* @param string $message 日誌資訊
* @param string $level 日誌級別
* @param integer $type 日誌記錄方式
* @param string $destination 寫入目標
* @param string $extra 額外引數
* @return void
*/
static function write($message,$level=self::ERR,$type=self::FILE,$destination='',$extra='') {
$now = date(self::$format);
if(empty($destination))
$destination = LOG_PATH.date('y_m_d').".log";
if(self::FILE == $type) { // 檔案方式記錄日誌
//檢測日誌檔案大小,超過配置大小則備份日誌檔案重新生成
if(is_file($destination) && floor(C('LOG_FILE_SIZE')) <= filesize($destination) )
rename($destination,dirname($destination).'/'.time().'-'.basename($destination));
}
error_log("{$now} {$level}: {$message}\r\n", $type,$destination,$extra );
//clearstatcache();
}
}
相關文章
- shell日誌顏色處理
- orbeon form 的日誌處理ORBORM
- node錯誤處理與日誌
- DATAGUARD中手工處理日誌GAP
- ELK 處理 Spring Boot 日誌,不錯!Spring Boot
- 如何在zuul上做日誌處理Zuul
- 搭建node服務(1):日誌處理
- SpringBoot第十三篇:日誌處理Spring Boot
- 指令碼處理iOS的Crash日誌指令碼iOS
- 利用 ELK 處理 Percona 審計日誌
- 基於go開發日誌處理包Go
- node專案錯誤處理與日誌
- SQLServer資料庫日誌太大處理方式SQLServer資料庫
- logback下日誌輸出前處理操作——以日誌脫敏為例
- 『無為則無心』Python日誌 — 67、logging日誌模組處理流程Python
- Spark SQL:實現日誌離線批處理SparkSQL
- 對 Hyperf 做的那些事 3(日誌處理)
- 從0寫一個Golang日誌處理包Golang
- Oracle DataGuard歸檔日誌丟失處理方法Oracle
- ES & Filebeat 使用 Pipeline 處理日誌中的 @timestamp
- SpringBoot部落格開發之AOP日誌處理Spring Boot
- 結合 AOP 輕鬆處理事件釋出處理日誌事件
- 基於flink和drools的實時日誌處理
- syslog強大而安全的日誌處理系統
- Golang 快速讀取處理大日誌檔案工具Golang
- ORACLE 11G DATAGUARD 日誌中斷處理方案Oracle
- 日誌伺服器搭建之多伺服器日誌轉發與格式化處理伺服器
- LoggerOne – 高效、簡約、強擴充套件性PHP日誌類庫套件PHP
- PG啟動流程StartupXlog函式回放日誌前處理函式
- SQLServer 2008中事務日誌已滿問題處理SQLServer
- mysqlbinlog 處理二進位制日誌檔案的工具MySql
- alert日誌中出現Private Strand Flush Not Complete的處理方法
- 同步伺服器日誌到 SeaTable,讓日誌更好的視覺化和協同處理伺服器視覺化
- Laravel 建立分類日誌Laravel
- ctags 處理 PHP traitPHPAI
- PHP 時間處理PHP
- PHP 錯誤處理PHP
- php錯誤處理PHP
- SpringBoot開發案例構建分散式日誌處理系統Spring Boot分散式