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();
}
}
相關文章
- nginx日誌處理Nginx
- orbeon form 的日誌處理ORBORM
- shell日誌顏色處理
- DATAGUARD中手工處理日誌GAP
- node錯誤處理與日誌
- logstash kafka output 日誌處理Kafka
- oracle alert日誌亂碼處理Oracle
- strom打造日誌處理系統
- Db2 日誌處理二DB2
- apache日誌匯入oracle(日誌經過python處理)ApacheOraclePython
- 時間處理工具類&工作日處理類
- php日誌,記錄日誌PHP
- 30 個 PHP 的 Excel 處理類PHPExcel
- 如何在zuul上做日誌處理Zuul
- 搭建node服務(1):日誌處理
- 指令碼處理iOS的Crash日誌指令碼iOS
- logstash nginx error access 日誌處理NginxError
- 處理Apache日誌的Bash指令碼Apache指令碼
- 丟失重做日誌怎麼處理
- SQL Server日誌檔案總結及日誌滿的處理SQLServer
- [zt] SQL Server日誌檔案總結及日誌滿的處理SQLServer
- node專案錯誤處理與日誌
- 基於go開發日誌處理包Go
- ELK 處理 Spring Boot 日誌,不錯!Spring Boot
- 利用 ELK 處理 Percona 審計日誌
- 日誌和實時流計算處理
- 藍屏處理日誌: FuFlt64.sys
- SQL Server事務日誌的處理方法SQLServer
- ORACLE 告警日誌alert過大的處理Oracle
- IBM DB2 日誌處理一IBMDB2
- SQLServer資料庫日誌太大處理方式SQLServer資料庫
- sql server日誌檔案總結及日誌滿的處理辦法SQLServer
- 從0寫一個Golang日誌處理包Golang
- 對 Hyperf 做的那些事 3(日誌處理)
- SpringBoot第十三篇:日誌處理Spring Boot
- Spark SQL:實現日誌離線批處理SparkSQL
- Oracle DataGuard歸檔日誌丟失處理方法Oracle
- 在DATAGUARD中手工處理日誌GAP的方法