位置: 编程技术 - 正文

PHP的Yii框架的常用日志操作总结(php框架的作用)

编辑:rootadmin

推荐整理分享PHP的Yii框架的常用日志操作总结(php框架的作用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php框架symfony,php框架常用技术有哪些,php框架常用技术有哪些,php各大框架以及实现原理,php yii框架,php框架symfony,php常用框架,php常用框架,内容如对您有帮助,希望把文章链接给更多的朋友!

日志Yii提供了一个高度自定义化和高扩展性的日志框架。根据使用场景的不同,你可以很容易的对各种消息就行记录、过滤、合并,比如说文本文件,数据库文件,邮件。

使用Yii的日志框架包含如下步骤:

调用日志记录的方法

在主应用的配置文件(例如basic下面的web.php)中配置好日志的过滤和导出的设置 检查不同场景下经过过滤之后的日志信息 记录日志

记录日志其实就是简简单单的调用如下的方法:

[[Yii::trace()]]: 记录关于某段代码运行的相关消息。主要是用于开发环境。 [[Yii::info()]]: 在某些位置记录一些比较有用的信息的时候使用。 [[Yii::warning()]]: 当某些期望之外的事情发生的时候,使用该方法。 [[Yii::error()]]: 当某些需要立马解决的致命问题发生的时候,调用此方法记录相关信息。

上面的这些方法虽然根据不同的level和类型来记录信息,但是实际上它们调用的是同一个方法function($message, $category = 'application')。其中$message就是要记录的信息,$category表示的是这个日志的归属类。下面的代码表示在默认的‘application'分类下面记录了一条trace类型的信息。

提示:记录的$message可以是简单的string也可以是复杂的数组、对象。你应该根据不同的场景下日志记录的职责选取合适的$message类型。默认情况下,如果你记录的$message不是String,日志在导出的时候都会调用[[yiihelpersVarDumper::export()]] 方法来输出一个string类型的消息。

为了更好的组织管理及筛选日志消息,通常情况下应当为每一种日志分配合适的类别。你可以选择一种有明显等级区分意思的分类,用以方便根据不同的目的来筛选不同分类的日志。一种简单且有效的命名方式就是使用PHP的魔术常量METHOD来作为分类的名称。Yii框架里面的核心代码在做日志记录的时候就是这么干的。比如说:

在有常量METHOD出现的地方,它表示的就是当前的方法的名称(并且加上了当前方法所属的类的完整前缀)。举个例子吧,如果在appcontrollersRevenueController这个类里面的calculate方法里面有上面的那行代码,那么此时的METHOD表示的就是‘appcontrollersRevenueController::calculate'。

提示:上面所说的方法事实上只是单例对象[[yiilogLogger|logger object]] 的[[yiilogLogger::log()|log()]]方法的简单使用,我们可以通过Yii::getLogger()方法来获得这个单例对象。当我们记录了足够的日志信息或者当前的应用运行结束了,日志对象将调用[yiilogDispatcher|message dispatcher]] 方法把记录的日志信息写入到配置的目的位置。

log targets一个log target是[[yiilogTarget]]或者其子类的实例。它根据严重的等级和分类类过滤日志,然后把日志导出到合适的媒介上面去。就比如说,一个[[yiilogDbTarget|database target]] 对象就会把过滤之后的日志信息导出到对应数据库。你可以在应用的配置文件中的日志组件处注册多个log targets,就像下面这样:

注意:日志组件必须在bootstrap中配置,这样才能把日志信息分发到对应的log target.上面的代码里面,两个log target注册到了[[yiilogDispatcher::targets]]里面。

第一个筛选出错误和警告信息并且把这些信息保存到了数据库。第二个筛选出分类以yiidb*开头的错误信息,并把这些信息通过邮件发送到admin@example.com 和 developer@example.com.Yii有下面这些内置的log targets,你可以参考API文档来学习具体怎么去配置和使用它们。

[[yiilogDbTarget]]:把日志信息保存到数据库。 [[yiilogEmailTarget]]: 把日志信息发送到指定的邮箱,上面的例子就是。 [[yiilogFileTarget]]: 把日志写到到文件。 [[yiilogSyslogTarget]]: 调用PHP的syslog()方法将日志写入到系统日志。

接下来,我们就来看看常见的log target具有的功能。

消息过滤就每一种log target而言,你可以配置它的 [[yiilogTarget::levels|levels]] 和 [[yiilogTarget::categories|categories]]属性类设置它的严重程度以及归属的分类。[[yiilogTarget::levels|levels]]属性的采用一个数组里面的一个或者多个值,这个数组包含如下值:

error:对应[[Yii::error()]]记录的消息 warning:对应[[Yii::warning()]]记录的消息 info :对应 [[Yii::info()]]记录的信息 trace:对应 [[Yii::trace()]]记录的信息. profile :对应[[Yii::beginProfile()]] 和 [[Yii::endProfile()]]记录的信息,这种方式下面更多详细信息会被记录。

如果你没有指定[[yiilogTarget::levels|levels]] 的值,那么任何level的信息都会被记录。

[[yiilogTarget::categories|categories]] 属性的值是数组,这个数组里面的值可以是一个具体的分类名称,也可以是类似正则的匹配模式。只有在target能在这个数组里面找到对应的分类名或者符合某一个匹配模式,他才会处理这些消息。这里的匹配模式的组成是在分类的名称后面加上一个号。如果这个分类恰好和这个匹配模式的号前的字符匹配,那么也就是这个分类找到对应匹配值。举个例来说,在类[[yiidbCommand]]中的yiidbCommand::execute和yii dbCommand:: query 方法使用类名类记录相关日志信息,那么这个时候他们都匹配模式yiidb*

同样的,如果我们没有指定[[yiilogTarget::categories|categories]],那么每一种分类的日志信息都会被处理。除了通过[[yiilogTarget::categories|categories]] 属性来设置分类的白名单外,你也可以通过 [[yiilogTarget::except|except]]属性来设置分类的黑名单。属于黑名单的分类日志信息不会被target处理。

PHP的Yii框架的常用日志操作总结(php框架的作用)

下面的配置指定了一个分类匹配yiidb*或者 yiiwebHttpException:*,但又不包括yiiwebHttpException:的分类,而且它只处理错误和警告的日志信息。

注意:当错误的句柄捕获到HTTP的异常的时候,记录的日志信息会以yiiwebHttpException:ErrorCode的这种格式记录,例如[[yiiwebNotFoundHttpException]] 就会被记录成yiiwebHttpException:消息格式化日志targets用多种格式来导出日志。举个例子,如果你的日志target是[[yiilogFileTarget]],那么你在你的程序中记录日志的时候,应该会找到类似于文件runtime/log/app.log 记录的如下的信息:

默认情况下,[[yiilogTarget::formatMessage()]]:会帮我们把日志信息格式化成下面的这种格式:

你可以通过给[[yiilogTarget::prefix]] 属性配置一个自定义的回调函数来 自定义日志的前缀。下面的代码就实现了在每条日志信息前面加上了用户的ID(ip地址,sessionId等敏感信息因为个人隐私被去掉了)。

除了日志消息的前缀,日志的target还把一些上下文信息附加在了每一批的日志记录中。默认情况下,全局的PHP变量包含$_GET, $_POST, $_FILES, $_COOKIE, $_SESSION 和 $_SERVER. 你可以通过配置 [[yiilogTarget::logVars]] 来调整日志记录的全局变量。下面的代码表示的是只记录$_SERVER相关的变量。

当 'logVars'为空的时候,表示不记录相关的上下文信息。如果你想自定义上下文信息的提供方式,你可以覆写[[yiilogTarget::getContextMessage()]] 方法。

消息的trace等级在开发的过程当中,我们总是期望能够知道每一条日志消息是来自哪里。在Yii中你可以通过配置[[yiilogDispatcher::traceLevel|traceLevel]] 属性来实现。配置的示例如下:

上面的示例在YII_DEBUG为true的时候将[[yiilogDispatcher::traceLevel|traceLevel]] 设置为3,反之设置为0. 意思是什么呢?3表示每一条日志记录都会记录与之相关的三层栈调用信息,0表示不记录任何相关的栈调用信息

提示:没有必要总是记录调用的堆栈信息,比较耗性能。所以,你应该只在你开发的时候或者用于调试的情况下使用该功能。消息的清空和导出就如同上面说的,记录的消息以数组的形式保存在[[yiilogLogger|logger object]]中。为了限制这个数组消耗过多的内存,当这个数组包含的内容大小达到某个量的时候会被对应的target从内存中转移到对应的目标(文件,数据库...)中。你可以通过设置 [[yiilogDispatcher::flushInterval|flushInterval]] 的值来决定量的大小。像下面这样:

注意:在应用运行结束的时候也会刷新内存,这样做事为了让日志的target能够记录完整的信息。把日志信息从内存刷到对应存放的地方的这一动作不是立即发生的。事实上,和上面一样,都是当内存中的日志大小达到一定程度才会发生。你可以像下面的示例一样通过配置不同target的[[yiilogTarget::exportInterval|exportInterval]]值,来达到修改的目的:

因为清空和导出的设定,默认情况下你调用 Yii::trace() 或者其他的日志记录方法的时候不会在日志target下立马看到日志消息。这对某些长时间运行的控制台程序是一个问题。不过这个问题是可以解决的,方法入下面的代码,你需要把[[yiilogDispatcher::flushInterval|flushInterval]] 和[[yiilogTarget::exportInterval|exportInterval]] 的值都设置成1:

注意:如此频繁的清空和导出日志消息会降低系统的性能。切换日志的targets你可以通过设置[[yiilogTarget::enabled|enabled]] 属性来禁止日志的target。就如同下面的代码描述的一样:

上面的代码需要你在配置文件里面有一个下面的配置:

创建一个新的target首先,创建一个新的日志target是很简单的。你主要做的事情是实现[[yiilogTarget::export()]] 方法并且把数组类型的消息[[yiilogTarget::messages]]发送到指定的存储媒介上去就行了。在这个过程中你可以调用[[yiilogTarget::formatMessage()]] 方法来格式化每一条日志消息。至于更多的细节你可以在Yiid的发行版本里找到详细的信息。

性能评测性能评测是一种比较特别的日志记录。它通常用来获取某些模块执行时间的数据,以此来找到性能的问题所在。比如说,[[yiidbCommand]] 这个类就用性能评测日志来获得每一条sql查询所花费的时间。

要使用该类日志,你首先要做的时确定你要测试的代码范围。然后在每一段代码之间你都应该要保持它们是闭合的,就像下面这个样子:

myBenchmark只是一个标识,用于你在查看对应日志记录的时候快速定位。在beginProfile和endProfile之间是可以再嵌套的,但是必须保证正确的闭合关系,如下所示:

如果上面的闭合关系出错了,对应的记录都不会正常工作。

对于每一块被评测的代码,日志的level都是profile。你可以再日志的target中配置这些信息并导出它们。 Yii内建了 Yii debugger来展示评测的结果。

PHP判断手机是IOS还是Android 本文介绍了PHP判断手机是IOS还是Android的三个小实例,要判断用户的手机是安卓的还是ios的,搜了一下相关的资料,最终获得的结果分享给大家。实例1:

学习php设计模式 php实现观察者模式(Observer) 一、意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新【GOF】又称为发布-订阅

学习php设计模式 php实现备忘录模式(Memento) 一、意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样可以在以后把该对象的状态恢复到之前保存的状态

标签: php框架的作用

本文链接地址:https://www.jiuchutong.com/biancheng/281558.html 转载请保留说明!

上一篇:Linux系统下使用XHProf和XHGui分析PHP运行性能(linux怎样使用)

下一篇:PHP判断手机是IOS还是Android(php判断ip是否属于某个区段)

  • 已认证进项税额转出会计分录账务处理
  • 个人去税务局开劳务票 税点是多少
  • 支付的画图费没有发票要如何处理
  • 本月销售商品的实际成本怎么算
  • 2021年9月个税申报截止时间
  • 残疾人就业保障金
  • 收到0税率的增值税发票
  • 提取资本公积会计凭证
  • 股权内部转让交增值税吗
  • 逐步测试法计算内含报酬率
  • 税局代开的法律顾问费能否抵扣
  • 工会劳动保护费不能列支劳保用品
  • 经济补偿金如何计税
  • 小规模纳税人附加税优惠政策2023
  • 同一建筑工程签不同合同
  • 退役士兵增值税优惠申报方法
  • 营改增后一般纳税人动产租赁税率
  • 支票遗失要怎么补办
  • 客户少付货款怎么做账
  • 增值税纳税申报表怎么填
  • 进口货物如何缴增值税
  • 商业支付时使用
  • 厂家赠送的原材料怎么入账
  • 出口货物退税率为0,是否出口免税
  • Olehelp.exe - Olehelp是什么进程 有什么用
  • 农产品专票可以开零税率吗
  • 制药企业成本核算流程
  • 应收挂账太久有什么税务风险
  • 境外服务费代扣代缴所得税计算
  • 小规模纳税人低于30万怎么填报申报表
  • 前端 组件化
  • web前端框架是什么
  • 个体工商户和个人独资企业的区别
  • 企业职工生活费
  • 应收账款0
  • 公司变卖汽车按什么税率
  • 固定资产一次性扣除政策2023
  • 应付票据贴现是负债吗
  • mysql分表的3种方法
  • mongodb数据库操作遇到的问题和解决方案
  • 未分配利润用于扩大再生产
  • 对公付款对方不开发票可以吗
  • 公司活动举办属于哪个部门
  • 劳动仲裁经济补偿金写多了
  • 购销合同没注明合同有效期
  • 公司拨款给个人分录
  • 出口退税项目
  • 成本暂估跨年度怎么算
  • 收到票据又转背书付了账务处理
  • 公司新产品研发上市的意义和价值
  • 所有者权益的概念和特征
  • 发票丢失记账联入账
  • 工程尾款要计入什么科目
  • 物业管理企业应当与居委会共同做好什么工作
  • jdbc连接MySQL实验总结
  • 如何在windows里保存画过的画
  • os x10.11el capitan beta4更新了什么?os x10.11el capitan beta4下载地址
  • centos查找目录命令
  • centos inode
  • 如何封禁
  • 国产系统麒麟和统信
  • win7系统安装谷歌浏览器
  • 如何打开和关闭HMB
  • tplinkwr740n设置
  • cocos做游戏
  • 简述opengl的编程步骤
  • 安卓摄像头设置在哪里
  • express app.js
  • javascript可以制作哪些游戏?
  • node+express+ejs使用模版引擎做的一个示例demo
  • 我的自定义计划怎么删除
  • unity fixed update
  • javascript教程完整版
  • unity3d documentation
  • 山东省国税地税体制改革
  • 买房送地下室土地可以吗
  • 最新专票税率几个档
  • 国税商品分类目录
  • 资源税的定义是什么
  • 国税局发票查询平台发票查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设