`
xieye
  • 浏览: 830793 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

phalcon 自定义超强日志类

    博客分类:
  • PHP
阅读更多
phalcon自带的日志文件类,有两个麻烦之处。
1、路径不能自动创建
2、打印消息非得要求是字符串。

自定义类如下:

<?php



use Phalcon\Logger\Adapter\File as FileAdapter;
use Phalcon\Logger\AdapterInterface;

/**
* 自定义 phalcon 日志类
*
* 解决两大痛点:
* 1、路径不能自动创建
* 2、打印消息非得要求是字符串。
*
* 使用方式
*
*  $logger = SuperLogger::getInstance(SuperLogger::CLIENT_LOG);
*  $logger
*     ->info(  'This is a {message}',
*      [
*          'message' => time()
*      ] )
*     ->log(  time() )
*     ->log(Logger::NOTICE,  time() )
*     ->error(  ['aa'=>11111,'b'=>22222] );
*
*  echo "读取日志:".$logger->getPath()."<br>";
*  echo file_get_contents($logger->getPath());
*
* 也可以构造方法参数为空,再 select,或 setPath
*
* Class SuperLogger
*
* @method AdapterInterface setFormatter(FormatterInterface $formatter)
* @method FormatterInterface getFormatter()
* @method AdapterInterface setLogLevel($level)
* @method AdapterInterface log($type, $message = null, array $context = null)
* @method AdapterInterface debug($message, array $context = null)
* @method AdapterInterface error($message, array $context = null)
* @method AdapterInterface info($message, array $context = null)
* @method AdapterInterface notice($message, array $context = null)
* @method AdapterInterface warning($message, array $context = null)
* @method AdapterInterface alert($message, array $context = null)
* @method AdapterInterface emergency($message, array $context = null)
* @method AdapterInterface begin()
* @method AdapterInterface commit()
*
*
* @author yyy
*/
class SuperLogger
{

    /**
     * @var FileAdapter
     */
    protected $logger;

    protected $file; // 文件完整路径

    protected $baseDir;// 预定义日志文件基路径

    /**
     * 这里自定义一些常量。日志类型。
     */
    const HTTP_LOG = 1;
    const CLIENT_LOG = 2;
    const MENU_LOG = 3;

    const PATH_ARR =[
        self::HTTP_LOG => 'http/',
        self::CLIENT_LOG => 'client/',
        self::MENU_LOG => 'menu/',
    ];

    /**
     * 这里自定义默认日志根路径。
     *
     * @param mixed $file
     */
    public function __construct( $file = null)
    {
        $this->baseDir = BASE_PATH . '/cache/logs/';
        if ($file) {
            if (is_int($file)) {
                $this->select($file);
            } else {
                $this->setPath($file);
            }
        }
    }

    public static function getInstance( $file = null):self
    {
        return new self($file);
    }

    /**
     * 选择不同的日志类型,自行修改。
     *
     * @param $type
     * @return $this
     */
    public function select(int $type=null):self
    {
        if (in_array( $type, array_keys( self::PATH_ARR) )) {
            $this->setPath($this->baseDir . self::PATH_ARR[$type] . date("Ymd") . '.log');
        } else {
            $this->setPath($this->baseDir . date("Ymd") . '.log');
        }
        return $this;
    }

    public function getPath(): string
    {
        return $this->file;
    }


    public function setPath(string $file):self
    {
        $this->file = $file;
        $folder = preg_replace('#^(.+)/[^/]+$#', '$1', $file);
        if (!file_exists($folder)) {
            mkdir($folder, 0777, true);
        }
        $this->logger = new FileAdapter($file);
        return $this;
    }

    function __call($funName, $arguments)
    {
        if ($this->logger == null) {
            $this->select();
        }

        if (in_array($funName, ['debug', 'error', 'info', 'notice', 'warning', 'alert', 'emergency',])
            || ($funName == 'log' && (!(is_int($arguments[0]) && $arguments[0] >= 0 && $arguments[0] <= 9)))
        ) {
            if (is_array($arguments[0])) {
                $arguments[0] = var_export($arguments[0], 1);
            } else {
                $arguments[0] = strval($arguments[0]);
            }
            $this->logger->$funName(...$arguments);
            return $this;
        } elseif ($funName == 'log' && is_int($arguments[0]) && $arguments[0] >= 0 && $arguments[0] <= 9) {
            if (is_array($arguments[1])) {
                $arguments[1] = var_export($arguments[1], 1);
            } else {
                $arguments[1] = strval($arguments[1]);
            }
            $this->logger->$funName(...$arguments);
            return $this;
        } else {
            return $this->logger->$funName(...$arguments);
        }
    }

}

0
0
分享到:
评论

相关推荐

    Logme-Phalcon:Logme 是一个基于 phalconPHP 的日志和报表系统

    2. **自定义日志格式**:允许开发者根据项目需求定制日志输出格式,方便后期分析和处理。 3. **实时监控**:可以实时查看系统产生的日志,及时发现并解决问题。 4. **日志归档**:自动将过期日志归档,防止日志...

    phalcon 中文文档 全中文手册

    这部分将讲解如何扩展Phalcon并实现自定义功能。 总之,“phalcon 中文文档 全中文手册”是学习和掌握Phalcon框架的重要资料,它涵盖了从基础到高级的所有关键知识点,对于想要提升PHP开发效率的开发者来说,是一份...

    PhalconPHP 3.4.0.zip

    PhalconPHP 3.4.0 更新日志:2018-05-28添加Phalcon\Mvc\Router::attach直接将路由对象添加到路由器#13326中;增加了侦听请求的功能:beforeAuthorizationResolve和request:afterAuthorizationResolve事件,这种...

    phalcon.dll(windows phalcon插件)

    "phalcon.dll"是Phalcon框架在Windows操作系统下的动态链接库文件,它是Phalcon在Windows环境下运行的关键组件。 在Windows上安装Phalcon,首先需要确保你的PHP环境满足最低版本要求,即PHP 5.6。这是因为Phalcon ...

    php phalcon项目实战

    “源码”标签表明这个项目涉及到的是实际的代码实现,可能是为了帮助开发者理解Phalcon框架的核心概念和工作原理,同时也可能包含了项目中自定义的组件或模块。“工具”则暗示可能使用了其他辅助开发工具,如IDE、...

    phalcon 中文chm文档

    11. **日志(Logging)**:Phalcon提供了简单的日志接口,可以记录应用程序中的各种信息,有助于调试和监控。 12. **国际化(Internationalization, i18n)**:文档还会涉及如何在Phalcon中实现多语言支持,使应用...

    Phalcon 2.0.10 文档 html中文版

    3. 事件管理:Phalcon支持事件驱动编程,允许在特定操作前后触发回调函数,实现如日志记录、权限检查等功能。 4. 安全特性:框架内置了安全相关的组件,如防止SQL注入的查询构建器、防止跨站脚本攻击的过滤器,以及...

    php7.2 phalcon扩展 64位

    - `CHANGELOG-*`: 这些HTML文件是Phalcon的更新日志,详细记录了各个版本的变更、新功能、改进和已知问题。通过阅读这些文件,开发者可以了解不同版本之间的差异,以便选择最适合自己的版本。 - `BACKERS.html`:...

    PHP7框架Phalcon7 v1.2.3

    开发者不需要学习和使用 C 语言的功能, 因为所有的功能都以 PHP 类的方式暴露出来,可以直接使用。 Phalcon 也是松耦合的,可以根据项目的需要任意使用其他对象。Phalcon 不只是为了卓越的性能, 我们的目标是让它...

    Phalcon 3.0.0 中文文档

    8. 日志(Logging):记录应用程序的运行日志,便于调试和问题排查。 四、Phalcon的开发实践 1. 使用Phalcon开发API:Phalcon的轻量级和高性能特性使其非常适合构建RESTful API。 2. 布局和部分视图:利用Volt模板...

    phalcon开发工具 phalcon-tools

    phalcon开发工具 phalcon-tools

    phalcon IDE代码提示库

    安装完成后,重启IDE,它将自动识别Phalcon框架,并在编写代码时提供相关的类、方法和属性提示。 2. **NetBeans集成**: NetBeans也是PHP开发者常用的IDE之一。虽然官方可能没有直接的Phalcon插件,但你可以通过配置...

    Phalcon7 (高性能 PHP 7框架) v1.2.3.zip

    Phalcon7 (高性能 PHP 7框架) v1.2.3更新日志 该版本修复了 Model、Security 和 Request 中的 BUG。 新增了 `PhalconIntrusiveAvltree` 类 Phalcon7 (高性能 PHP 7框架)页面展示 相关阅读 同类推荐:程序框架

    phalcon文档附中文笔记

    例如,你可以学习如何创建自定义的路由器,实现灵活的URL设计;在模型层,Phalcon提供了Active Record和DAO两种方式与数据库交互,让你可以方便地执行SQL语句或进行ORM操作。 另外,Phalcon的性能优化是其一大亮点...

    Phalcon php框架 v2.0.2.zip

    无需学习和使用 C 语言,所有函数都以 PHP 类的方式曾现。Phalcon 是一个松耦合的框架。   Phalcon 2.0 基于高性能编译语言Zephir,Zephir的目的是提供一个全新的更简单的语法来编写PHP扩展。   Phalcon 1.x还...

    phalcon框架文档(官方完整版)

    错误处理和日志记录在Phalcon中是标准化的,开发者可以自定义错误处理器和日志记录器,以适应项目的特定需求。 通过阅读提供的"phalcon英文文档(官方完整版).pdf",你可以深入了解这些概念,并掌握如何有效地...

    Phalcon1.3中文手册,纯手工翻译

    由于国内关于Phalcon的中文资源相对匮乏,尤其是最新的1.3版本的文档,这个由作者纯手工翻译的Phalcon 1.3中文手册显得尤为珍贵。 手册的发布旨在解决中文社区对于最新技术学习的需求,帮助开发者快速理解和掌握...

    phalcon 中文参考文档

    作为一款全栈框架,Phalcon包含了路由、视图、模型、控制器、数据库适配器、缓存等多个核心组件,为开发者提供了丰富的功能和高效的开发工具。 中文参考文档"phalcon_zh_cn_docs"涵盖了Phalcon框架的各个方面,是...

Global site tag (gtag.js) - Google Analytics