php自定义日志文件,自定义Log日志类

为什么需要日志Log

日志的功能:

1.了解系统运行情况

2.记录用户的操作信息(记录用户传递了什么参数等)

3.收集数据(记录请求响应请求等)

PHP自带的日志系统

php中有一个记录日志的函数:

bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ):

$message_type:记录日志的类型:

0 :message 发送到 PHP 的系统日志,使用 操作系统的日志机制或者一个文件,取决于 error_log 指令设置了什么。 这是个默认的选项。

1:message 发送到参数 destination 设置的邮件地址。 第四个参数 extra_headers 只有在这个类型里才会被用到。

2:不再是一个选项。

3:message 被发送到位置为 destination 的文件里。 字符 message 不会默认被当做新的一行。

4:message 直接发送到 SAPI 的日志处理程序中。

如何自定义自己的日志系统

步骤如下:

1.类自动加载类(Loader.php)

/**

* Created by PhpStorm.

* User: Administrator

* Date: 2016/3/27

* Time: 14:15

*/

namespace IMooc;

class Loader

{

static function autoload($class){

require_once BASEDIR.'/'.str_replace('\\','/',$class).'.php';

}

}

2.配置文件类(Config.php)

/**

* Created by PhpStorm.

* User: Administrator

* Date: 2016/3/27

* Time: 22:55

*/

namespace IMooc;

class Config implements \ArrayAccess

{

protected $config = array();

private $path;

public function __construct($path){

$this->path = $path;

}

public function offsetGet($key){

if(empty($this->config[$key])){

$file_path = $this->path.'/'.$key.'.php';

$this->config[$key] = require $file_path;

return $this->config[$key];

}

}

public function offsetExists($key){}

public function offsetSet($key, $value){

throw new \Exception('config not found!');

}

public function offsetUnset($key){}

}

3.自定义日志类(Log.php)=>以天为记录单位

/**

* Created by PhpStorm.

* User: Administrator

* Date: 2016/3/31

* Time: 18:11

*/

namespace IMooc;

use \IMooc\Config;

class Log

{

private static $log_path ;

/*

* 构造log文件路径

* @param $log_name string log路径别称

* */

public function __construct($log_name){

self::setLog($log_name);

}

/*

* 设置log的路径

* @param $log_name string log路径别称

* */

private static function setLog($log_name){

//引入Logs配置文件

$config = new Config(BASEDIR.'/Configs');

if(empty($config['log'])){

$cofigs = $config['log'];

if(isset($cofigs[$log_name]))

self::$log_path = $cofigs[$log_name];

else

self::$log_path = BASEDIR."/Logs/".date("Y-m-d").'/';

}else{

throw new \Exception("Logs Dir is not exist !");

}

}

/*

* 将信息写入log文件中

* @param $message mixture log信息

* @param $log_name string log路径别称

* */

public static function log($message = "" ,$log_name = ""){

if(!empty($log_name))

self::setLog($log_name);

$date = date("Y-m-d");

$log_dir = self::$log_path;

if(!is_dir($log_dir))

mkdir($log_dir, 0777,true);

$log_file_name = $log_dir.$date.'.log';

if(!file_exists($log_file_name))

touch($log_file_name);

$fp = fopen($log_file_name, "a");

flock($fp, LOCK_EX);

if(is_array($message))

$message = self::arrayToString($message);

$message = sprintf("执行日期:[%s]:%s",date("Y-m-d H:i:s"),$message."\n");

fwrite($fp, $message);

fclose($fp);

}

/*

* 将数组转化为特定结构的字符串

* @param $arr array 待转化数组

* return $str string 转化后的字符串

* */

public static function arrayToString($arr){

$str = "";

if(!is_array($arr))

return $str;

foreach($arr as $key => $value){

if(is_array($value))

$str .= $key.":".self::arrayToString($value);

else

$str .= " ".$key.":".$value." ";

}

return "[".$str."]";

}

}

4.在根目录下创建Config文件夹,在这里建立一个log.php文件

/**

* Created by PhpStorm.

* User: Administrator

* Date: 2016/3/31

* Time: 19:30

*/

$config = [

//不同的下标代表不同的日志

'log01' => BASEDIR."/Logs/log01/",

'log02' => BASEDIR."/Logs/log02/",

'Imooc' => BASEDIR."/Logs/Imooc/",

];

return $config;

?php>

5.在index.php文件中调用Log类

/**

* Created by PhpStorm.

* User: Administrator

* Date: 2016/3/27

* Time: 13:43

*/

//定义项目的根文件路径=>根据自己的项目路径进行定义

define('BASEDIR',__DIR__);

//载入自动加载类

include BASEDIR.'/IMooc/Loader.php';

spl_autoload_register('\\IMooc\\Loader::autoload');

$date = date("Y-m-d H:i:s");

$message=['message'=>'OK','status'=>'200','info'=>['name'=>"DekingChne", "age" => 18]];

//将数组写入log中

\IMooc\Log::log($message,'Imooc');//通过第二个参数进行选择配置的日志路径

?php>

6.运行结果如下:

在根目录下建立了Logs/Imooc/2016-03-31.log日志文件:

AAffA0nNPuCLAAAAAElFTkSuQmCC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值