分享一个我自己用的在 WordPress 开发中用得到的一个调试日志类。
<?php
/**
* @author: suifengtec coolwp.com
* @date: 2013-02-03 09:55:55
* @last Modified by: suifengtec coolwp.com
* @last Modified time: 2015-07-12 18:40:02
*/
if(function_exists('add_action')){
defined('ABSPATH') or exit;
}
if(!class_exists('CoolWP_com_Log')){
final class CoolWP_com_Log{
private $dir = null;
private $debug_file_name = null;
private $f_path = null;
public function __clone() {
_doing_it_wrong( __FUNCTION__, 'Cheatin’ huh?', '0.9.0' );
}
public function __wakeup() {
_doing_it_wrong( __FUNCTION__, 'Cheatin’ huh?', '0.9.0' );
}
public function __construct($main_file=''){
$main_file = (''==$main_file)?__FILE__:$main_file;
$this->dir = dirname($main_file).DIRECTORY_SEPARATOR.'debug'.DIRECTORY_SEPARATOR;
$file_name = 'debug_'.md5($main_file).'.log';
$this->debug_file_name = (function_exists('apply_filters'))?apply_filters('cwp_debug_log_file_name',$file_name).'.log':$file_name.'.log';
$this->f_path = $this->dir.$this->debug_file_name;
$this->check_log_file();
}
/**
* adding log item
* @param string $text : adding content
*/
public function add($text) {
date_default_timezone_set('Asia/Shanghai');
if(is_array($text)||is_obeject($text)){
$text = json_encode($text);
}
$fp = fopen( $this->f_path,"a");
flock($fp, LOCK_EX) ;
fwrite($fp,"".date("Y-m-d H:i:s",time())."\n".$text."\n\n");
flock($fp, LOCK_UN);
fclose($fp);
//return true;
//
}
/**
* checking the log file and path.
* @return null
*/
private function check_log_file(){
$is_dir = is_dir($this->dir);
$is_file = file_exists($this->f_path);
if($is_dir && $is_file) return;
if(!$is_dir||!$is_file){
if(!$is_dir){
$md = mkdir($this->dir,0777,true);
}
if(!$is_file){
$fp = fopen( $this->f_path,"a");
fclose($fp);
}
}
}
}/*//CLASS*/
}
/*ALL DONE.*/
?>
以WordPress插件为例的用例:
在插件主文件的适当位置加入(假如上述代码放置在class-coolwp-debug-log.php文件中):
$this->is_debug = true;
if($this->is_debug){
require_once( plugin_dir_path(__FILE__).'classes/class-coolwp-debug-log.php');
$this->Log = new CoolWP_com_Log();
}
如果在插件主文件中将__FILE__定义为常量 SOMEONE_THIS,那么,可以将SOMEONE_THIS 作为参数传给CoolWP_com_Log(),例如:
$this->Log = new CoolWP_com_Log(SOMEONE_THIS);
传不传参数的区别是日志文件的位置不同,如果不传参数,日志文件位于class-coolwp-debug-log.php所在目录下的debug目录下;如果传递了SOMEONE_THIS参数,那么,日志文件位于插件主目录下的debug目录下。日志文件的文件名称为debug_*******log。
日志条目默认采用北京时间。
在 WordPress 环境中,可以使用 filter hook:
apply_filters('cwp_debug_log_file_name',$file_name)
来修改默认的日志文件的名称。