注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

isblog主页

或许不一定要做得最多,但一定要做得最好! 能力就是一种财富,积累越多,就越体现你

 
 
 

日志

 
 

PHP写日志类  

2014-03-06 16:20:00|  分类: PHP学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
自己写的一个简单日志类
1、数组、对象信息转为json格式保存,且中文不转义原样保存。
2、支持目录递归创建。

<?php
/**
* Logging Class
*
* @subpackage Libraries
* @category Logging
*/
defined('FILE_READ_MODE') || define('FILE_READ_MODE', 0644);
defined('FILE_WRITE_MODE') || define('FILE_WRITE_MODE', 0666);
defined('DIR_READ_MODE') || define('DIR_READ_MODE', 0755);
defined('DIR_WRITE_MODE') || define('DIR_WRITE_MODE', 0777);
defined('FOPEN_READ') || define('FOPEN_READ','rb');
defined('FOPEN_READ_WRITE') || define('FOPEN_READ_WRITE','r+b');
defined('FOPEN_WRITE_CREATE_DESTRUCTIVE') || define('FOPEN_WRITE_CREATE_DESTRUCTIVE','wb'); // truncates existing file data, use with care
defined('FOPEN_READ_WRITE_CREATE_DESTRUCTIVE') || define('FOPEN_READ_WRITE_CREATE_DESTRUCTIVE','w+b'); // truncates existing file data, use with care
defined('FOPEN_WRITE_CREATE') || define('FOPEN_WRITE_CREATE','ab');
defined('FOPEN_READ_WRITE_CREATE') || define('FOPEN_READ_WRITE_CREATE','a+b');
defined('FOPEN_WRITE_CREATE_STRICT') || define('FOPEN_WRITE_CREATE_STRICT','xb');
defined('FOPEN_READ_WRITE_CREATE_STRICT') || define('FOPEN_READ_WRITE_CREATE_STRICT','x+b');
class Logger {

protected $_log_path;
protected $_log_file_name;
protected $_date_fmt = 'Y-m-d H:i:s';
protected $_enabled = TRUE;

/**
* 构造函数
* @param string $log_dir 日志要保存的目录路径,如果是数组时,则目录=$log_dir['dir'],文件名$log_dir['filename']
* @param string $log_filename 日志文件名,如果参数$log_dir是数组,则$log_filename=$log_dir['filename']
*/
public function __construct($log_dir='',$log_filename='')
{
if(is_array($log_dir))
{
if(isset($log_dir['dir']))$log_dir = $log_dir['dir'];
if(isset($log_dir['filename']))$log_filename = $log_dir['filename'];
}
$this->_log_file_name = ($log_filename != '') ? $log_filename : "error";
$this->_log_path = ($log_dir != '') ? $log_dir : getcwd().'/logs/';
if ( ! is_dir($this->_log_path))
{
$this->_enabled = $this->mkdirs($this->_log_path);
}
if ( ! is_writable($this->_log_path))
{
$this->_enabled = FALSE;
}
}

/**
* 写日志
*
* @param string $msg 日志信息
* @param string $logfile 日志文件名
* @param string $error_level 日志错误级别
* @return bool
*/
public function write_log($msg, $logfile = '', $error_level = 0)
{
$logfile = $logfile ? $logfile : $this->_log_file_name;
if( strstr($logfile,"/") )
{
$this->_log_path .= dirname($logfile)."/";
if( ! is_dir($this->_log_path))
{
$this->_enabled = $this->mkdirs($this->_log_path);
}
$logfile = basename($logfile);
}
if ($this->_enabled === FALSE)
{
return FALSE;
}
$filepath = $this->_log_path.date('Ymd').".".$logfile.'.log';
$message = '';
if ( ! $fp = @fopen($filepath, FOPEN_WRITE_CREATE))
{
return FALSE;
}
if(is_array($msg) OR is_object($msg))
{
$msg = json_encode($msg);
$pattern = "#\\\u([0-9a-f]+)#ie";
$replace = "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))";
$msg = preg_replace($pattern, $replace, $msg);//json中文不转义
}
if(is_numeric($error_level))
{
$msg = $error_level." ".$msg;
}
$message .= date($this->_date_fmt). ' --> '.$msg."\n";

flock($fp, LOCK_EX);
fwrite($fp, $message);
flock($fp, LOCK_UN);
fclose($fp);

@chmod($filepath, FILE_WRITE_MODE);
return TRUE;
}

/**
* 生成目录,可递归创建目录
* @param string $dir 目录路径
* @param string $mode 访问权限
* @return boolean
*/
public function mkdirs($dir,$mode='0777')
{
return is_dir($dir) or ($this->mkdirs(dirname($dir)) and mkdir($dir, $mode));
}
}



  评论这张
 
阅读(625)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017