- 浏览: 831367 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
xieye:
jetty插件有好几个版本,1.6,1.7,1.8
我选的是用 ...
tapestry入门(翻译)3 导入项目到eclipse -
xieye:
还有,
注:第2部分时,需要先安装jetty,我自己在安装过程 ...
tapestry入门(翻译)3 导入项目到eclipse -
xieye:
说明一下:实际使用中,导入时我并没有错误。2、我把eclips ...
tapestry入门(翻译)3 导入项目到eclipse -
xieye:
其实还是有一些先决条件的。1是外部环境,2是进步是阶段性的(意 ...
(转载文章)如何愉悦起来:一位精神治疗师的见解 -
mandy_yanzi:
我都已经饿7天了坚持为了我的衣衣
身体健康的问题
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);
}
}
}
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);
}
}
}
发表评论
-
召唤神龙 - 安装 centos 8, php 8, mysql 8, laravel 8 的整套 php 运行环境
2020-11-27 16:26 677本文编写时间:2020-11-27 传说集齐龙珠可以召唤神 ... -
centos8 使用阿里镜像快速安装php7.4套件
2020-11-15 00:48 812centos8 使用阿里镜像快速安装php7.4套件 本文只 ... -
centos7 使用阿里镜像快速安装php7.4套件
2020-11-15 00:32 1222本文只考虑centos7 今日 2020-11-16 rem ... -
composer常用命令
2020-11-05 14:46 1445列出当前全局配置 composer config -l -g ... -
期待centos8+php8 + mysql8 + laravel8,8888
2020-10-29 19:24 490期待centos8+php8 + mysql8 目前主要使用 ... -
ubuntu 安装 php7.4以及各类插件
2020-10-24 13:20 1093ubuntu 安装 php7.4以及各类插件 安装系统 最近 ... -
宝塔定义站点
2020-02-24 10:41 2宝塔定义站点。 1111111111111111111111 ... -
让php-fpm以root账号运行
2020-02-19 21:41 813一般来说,我们没有这种需求,但是当需要时, 可以让php-fp ... -
将代码部署到coding.net
2020-01-10 14:20 633coding.net 是一个git仓库,有免费有收费。 首先 ... -
php部署工具deployer技巧 - vendor目录创建
2020-01-06 12:06 891deployer是个好东西,可是每次都composer ,其实 ... -
自定义redis多个实例
2020-01-04 01:17 645假如多个项目部署到同一台服务器,有时会被redis的各项目前缀 ... -
推荐使用php的部署工具 deployer
2020-01-03 16:48 881php部署代码可以使用 https://deployer.or ... -
使用composer 类库 cachetool 清除opcache 的缓存
2020-01-03 16:38 962php的生产服务器上,需要把opche打开。 但有时,会被缓 ... -
laravel容器学习体会
2019-12-31 15:11 656根据文档与实测结果 假设我在app下建一个Services目 ... -
自定义后台的使用
2019-12-18 05:22 423如果自己写后台,保存用户的表单请求值 所有的情况如下: 1 ... -
phalcon 自定义事件使用的多种方式
2019-12-16 20:43 778方法1:官方文档的方式。 这是控制器: public ... -
phalcon对控制器返回值的使用以输出json
2019-12-16 19:17 820在phalcon里,控制器的Action的方法的返回值没啥用。 ... -
phalcon数据库DB使用实例
2019-12-12 17:12 696整理了一下phalcon的db使用,写了个demo。 ... -
php-redis5.0降级成php-redis4.3
2019-08-22 00:01 891最新版本的php的redis插件,版本是5.0 但是可能会有 ... -
aes加密解密php和java互通代码
2019-08-20 20:19 1159代码主要来源如下,但是注意做了修改: https://gist ...
相关推荐
2. **自定义日志格式**:允许开发者根据项目需求定制日志输出格式,方便后期分析和处理。 3. **实时监控**:可以实时查看系统产生的日志,及时发现并解决问题。 4. **日志归档**:自动将过期日志归档,防止日志...
这部分将讲解如何扩展Phalcon并实现自定义功能。 总之,“phalcon 中文文档 全中文手册”是学习和掌握Phalcon框架的重要资料,它涵盖了从基础到高级的所有关键知识点,对于想要提升PHP开发效率的开发者来说,是一份...
PhalconPHP 3.4.0 更新日志:2018-05-28添加Phalcon\Mvc\Router::attach直接将路由对象添加到路由器#13326中;增加了侦听请求的功能:beforeAuthorizationResolve和request:afterAuthorizationResolve事件,这种...
"phalcon.dll"是Phalcon框架在Windows操作系统下的动态链接库文件,它是Phalcon在Windows环境下运行的关键组件。 在Windows上安装Phalcon,首先需要确保你的PHP环境满足最低版本要求,即PHP 5.6。这是因为Phalcon ...
“源码”标签表明这个项目涉及到的是实际的代码实现,可能是为了帮助开发者理解Phalcon框架的核心概念和工作原理,同时也可能包含了项目中自定义的组件或模块。“工具”则暗示可能使用了其他辅助开发工具,如IDE、...
11. **日志(Logging)**:Phalcon提供了简单的日志接口,可以记录应用程序中的各种信息,有助于调试和监控。 12. **国际化(Internationalization, i18n)**:文档还会涉及如何在Phalcon中实现多语言支持,使应用...
3. 事件管理:Phalcon支持事件驱动编程,允许在特定操作前后触发回调函数,实现如日志记录、权限检查等功能。 4. 安全特性:框架内置了安全相关的组件,如防止SQL注入的查询构建器、防止跨站脚本攻击的过滤器,以及...
- `CHANGELOG-*`: 这些HTML文件是Phalcon的更新日志,详细记录了各个版本的变更、新功能、改进和已知问题。通过阅读这些文件,开发者可以了解不同版本之间的差异,以便选择最适合自己的版本。 - `BACKERS.html`:...
开发者不需要学习和使用 C 语言的功能, 因为所有的功能都以 PHP 类的方式暴露出来,可以直接使用。 Phalcon 也是松耦合的,可以根据项目的需要任意使用其他对象。Phalcon 不只是为了卓越的性能, 我们的目标是让它...
8. 日志(Logging):记录应用程序的运行日志,便于调试和问题排查。 四、Phalcon的开发实践 1. 使用Phalcon开发API:Phalcon的轻量级和高性能特性使其非常适合构建RESTful API。 2. 布局和部分视图:利用Volt模板...
phalcon开发工具 phalcon-tools
安装完成后,重启IDE,它将自动识别Phalcon框架,并在编写代码时提供相关的类、方法和属性提示。 2. **NetBeans集成**: NetBeans也是PHP开发者常用的IDE之一。虽然官方可能没有直接的Phalcon插件,但你可以通过配置...
Phalcon7 (高性能 PHP 7框架) v1.2.3更新日志 该版本修复了 Model、Security 和 Request 中的 BUG。 新增了 `PhalconIntrusiveAvltree` 类 Phalcon7 (高性能 PHP 7框架)页面展示 相关阅读 同类推荐:程序框架
例如,你可以学习如何创建自定义的路由器,实现灵活的URL设计;在模型层,Phalcon提供了Active Record和DAO两种方式与数据库交互,让你可以方便地执行SQL语句或进行ORM操作。 另外,Phalcon的性能优化是其一大亮点...
无需学习和使用 C 语言,所有函数都以 PHP 类的方式曾现。Phalcon 是一个松耦合的框架。 Phalcon 2.0 基于高性能编译语言Zephir,Zephir的目的是提供一个全新的更简单的语法来编写PHP扩展。 Phalcon 1.x还...
错误处理和日志记录在Phalcon中是标准化的,开发者可以自定义错误处理器和日志记录器,以适应项目的特定需求。 通过阅读提供的"phalcon英文文档(官方完整版).pdf",你可以深入了解这些概念,并掌握如何有效地...
由于国内关于Phalcon的中文资源相对匮乏,尤其是最新的1.3版本的文档,这个由作者纯手工翻译的Phalcon 1.3中文手册显得尤为珍贵。 手册的发布旨在解决中文社区对于最新技术学习的需求,帮助开发者快速理解和掌握...
作为一款全栈框架,Phalcon包含了路由、视图、模型、控制器、数据库适配器、缓存等多个核心组件,为开发者提供了丰富的功能和高效的开发工具。 中文参考文档"phalcon_zh_cn_docs"涵盖了Phalcon框架的各个方面,是...