日志作为面向bug编程的我们来说,是必不可少的一部分,也是作为项目是否良好运行的体检表,总的来说网站的日志主要分为两大类即操作日志与运行日志。
操作日志:主要记录用户在客户端的每一个动作及每个动作执行之后的影响(请求数据,返回结果,异常信息等等)
运行日志:主要记录服务器的运行状态。
本着练习的原则,就写了一个简单的写日志类。写日志其实原理挺简单的,就是将数据写入文本文件的过程。
class Log{
const LOGFILE = "curr.log";
//设置日志存储在根目录下的路径,更好的方式是从配置文件中读取
private static $logPath = "H:/test/log/";
//写日志
public static function write($content){
//判断是否需要备份
$log = self::isSize();
$author = isset($_SESSION['username'])?$_SESSION['username']:'null';
//写入前的日志格式
$template = '['.date('Y-m-d H:i:s').'] ';
$template .= '['.$_SERVER['SERVER_NAME'].'] ';
$template .= '['.$author.'] ';
// $template .= '['.__CLASS__ .'=>'.__METHOD__ . '] ';
$template .= PHP_EOL;
//先写入日志格式
$fh = fopen($log,'ab');
fwrite($fh,$template);
//如果写入的内容是数组
if(is_array($content)){
file_put_contents($log,var_export($content,true),FILE_APPEND);
$content = "";
}
//每写完一次则换行
//$content .= "\r\n";
$content .= PHP_EOL;
//追加日志内容
fwrite($fh,$content);
fclose($fh);
}
//备份日志
public static function bak(){
//改名并且另外存储
$bak = self::$logPath.date('ymd').mt_rand(10000,99999).'bak.log';
$log = self::$logPath.self::LOGFILE;
return rename($log,$bak);
}
//判断日志大小
public static function isSize(){
$log = self::$logPath.self::LOGFILE;
//echo $log;exit;
//如果文件不存在则创建之
if(!file_exists($log)){
touch($log);
return $log;
}
//如果文件存在则读取大小,小于1m继续写,大于1则备份
//q清除缓存重新获取文件大小,影响:写入较慢
// clearstatcache(true,$log);
$fsize = filesize($log);
if($fsize <= 1024 * 1024){
return $log;
}
//备份
if(!self::bak()){
return $log;
}else{
touch($log);
return $log;
}
}
}
调用示例:
include('Log.class.php');
$str = "我曾踏足山巅,也曾跌入低谷二者使我受益良多!";
log::write($str);