最新消息:

php扩展SeasLog应用于 yii2 组件

PHP kejiyoujia 115浏览 0评论

一.seaslog 简单介绍及使用原因

它是C 写的PHP扩展,性能很高,使用简单,能满足大部分简单的日志需求。(个人感觉)

缺点:(使用时碰到的坑)

1.如果配置有差错会直接报错,程序不健壮会导致页面直接挂掉,而且由于C写的这种意外报错你很难处理。(建议基本路径和模块路径一定要写对;环境变更时 也要时刻注意)

2. cli模式和CGL 模式下的读写混合的话,会报错,你注意区分下执行用户,即使日志文件是 777,也要区分 (正常坑)

二.安装与装置(比较简单,稍提一下)

2. 解压并进入目录,执行phpize,$/path/to/phpize

3.$ ./configure –with-php-config=/path/to/php-config

4.make && make install

三.因为公司使用的YII2 框架,我想要把这个日志系统加入使用,并且可配置化,无论是加入还是移除都比较方便;其次我想要他自动补全,那样开发起来效率高一些。

1.首先yii2 中的配置文件web.php 总加入日志类的指向:

说明: 我把我写的seaslog类放在base层,并且配置日志目录,框架的runtime 目录

return [     // ...     'components' => [         'authManager' => [  'class'    => 'app\mvc\_base\srv\Seaslog',

2. 封装日志类

思想:为了配合的方便与查看的清晰,我的每个日志文件与其命名空间对应,这样日志文件对应的产生日志的地方将一目了然(但是进入目录时有点小麻烦);继承yii2 的 object组件,以及修改部分框架的代码以达到自动补全功能;

class SeasLog extends Object {      public $basePath ;    //日志存放的目录     public $loggerPath ;  // 日志模块下面分模块      public function __construct     {         parent::__construct;        //todo  初始化工作     }        /**      * @desc  通用记录日志的 方法,可以设置级别      * @Author  FredGui      * @param $message      * @param string $loggerPath   默认是default, 一般使用调用者的命名空间 目录,php.ini 配置里面 是 defaultLog      * @param $level  总共8个 级别 ,暂且用三个,SEASLOG_INFO,SEASLOG_WARNING,SEASLOG_ERROR,      *  SEASLOG_DEBUG,SEASLOG_INFO,SEASLOG_NOTICE,SEASLOG_WARNING,SEASLOG_ERROR,SEASLOG_CRITICAL,SEASLOG_ALERT,SEASLOG_EMERGENCY      */     public function log($message,$loggerPath = 'default' ,$level = SEASLOG_WARNING ){          try{  $message = (is_array($message) || is_object($message)) ? json_encode($message,JSON_UNESCAPED_UNICODE) : $message;  if(file_exists($this -> basePath ) && is_writable($this -> basePath ) ) {  $this -> setBasePath($this -> basePath);  // 设置 日志目录  $this -> setLogger($loggerPath);  // moming模块名 即为 命名空间  \SeasLog::log($level, $message, array ,'');  }else{  // 默认 /var/log/www   日志目录  // 默认 defaultLog    存放日志文件  \SeasLog::log($level, $message, array ,'');  throw new Exception('日志路径没有读写权限!!',100001);  }         }catch (Exception $e){  // 出现错误异常记录下,存放在 日志路径下的 seaslogError.log  $errorPath = realpath(\Yii::$app->basePath . '/../runtime/seaslog');  // 目录问题   if(!is_dir($errorPath)){  @mkdir($errorPath, 0777, true);  chmod($errorPath, 0777);  if (!is_dir($errorPath)) exit('no write permission');  }  file_put_contents($errorPath .'/seaslogError.log' , 'time:'.date('Y-m-d H:i:s').','.$e->getMessage . '错误码:' .$e->getCode ,FILE_APPEND);         }     }      /**      * 记录info日志      * @param $message      * @param string $loggerPath      */      public function info($message, $loggerPath = 'default')     {         $this -> log($message,$loggerPath,SEASLOG_INFO);     }

由此可以得到 如下的日志目录:

php扩展SeasLog应用于 yii2 组件

进入查看:

最后,我们来完善下,自动补全,像这样

php扩展SeasLog应用于 yii2 组件php扩展SeasLog应用于 yii2 组件

在 path\vendor\yiisoft\yii2\Yii.php 总的$app 总 添加

/**
<?php /**  * Created by PhpStorm.  * User: FredGui  * Date: 2016/06/12  * Time: 14:17  */  namespace yii\base;   /**  * Class BaseApplication  * Used for properties that are identical for both WebApplication and ConsoleApplication  *  * @property \app\mvc\_base\srv\SeasLog $seaslog The auth manager for this application. Null is returned if auth manager is not configured. This property is read-only. Extended component.   */ abstract class BaseApplication extends Application { }
WebApplication.php 和 ConsoleApplication 也是如此。

转载请注明:PHP学习 » php扩展SeasLog应用于 yii2 组件

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址