YII Framework框架教程之日志用法详解

《PHP实例:YII Framework框架教程之日志用法详解》要点:
本文介绍了PHP实例:YII Framework框架教程之日志用法详解,希望对您有用。如果有疑问,可以联系我们。

PHP教程本文实例讲述了YII Framework框架日志用法.分享给大家供大家参考,具体如下:

PHP教程日志的作用(此处省略1000字)

PHP教程YII中的日志很好很强大,允许你把日志信息存放到数据库,发送到制定email,存放咋文件中,意见显示页面是,甚至可以用来做性能分析.

PHP教程YII中日志的基本配置:/yii_dev/testwebap/protected/config/main.php

PHP教程
'log'=>array(
  'class'=>'CLogRouter','routes'=>array(
    array(
      'class'=>'CFileLogRoute','levels'=>'error,warning',),// uncomment the following to show log messages on web pages
    /*
    array(
      'class'=>'CWebLogRoute',*/
  ),

PHP教程YII中日志的基本使用

PHP教程可以通过YII提供的Yii::log和Yii::trace进行日志信息的输出,两者的区别看看定义就知道了.

PHP教程函数定义

PHP教程
public static function trace($msg,$category='application')
{
  if(YII_DEBUG)
    self::log($msg,CLogger::LEVEL_TRACE,$category);
}
public static function log($msg,$level=CLogger::LEVEL_INFO,$category='application')
{
  if(self::$_logger===null)
    self::$_logger=new CLogger;
  if(YII_DEBUG && YII_TRACE_LEVEL>0 && $level!==CLogger::LEVEL_PROFILE)
  {
    $traces=debug_backtrace();
    $count=0;
    foreach($traces as $trace)
    {
      if(isset($trace['file'],$trace['line']) && strpos($trace['file'],YII_PATH)!==0)
      {
        $msg.="\nin ".$trace['file'].' ('.$trace['line'].')';
        if(++$count>=YII_TRACE_LEVEL)
          break;
      }
    }
  }
  self::$_logger->log($msg,$level,$category);
}

PHP教程$msg:你要输出的日志信息

PHP教程$category:日志信息所属分类

PHP教程$level:日志信息的级别:

PHP教程const LEVEL_TRACE='trace';用于调试环境,追踪程序执行流程
const LEVEL_WARNING='warning';警告信息
const LEVEL_ERROR='error';致命错误信息
const LEVEL_INFO='info';普通提示信息
const LEVEL_PROFILE='profile';性能调试信息

PHP教程基本使用办法举例

PHP教程
<?php
class DefaultController extends Controller
{
  public function actionCache ()
  {
    $category='system.testmod.defaultController';
    $level=CLogger::LEVEL_INFO;
    $msg='action begin ';
    Yii::log($msg,$category);
  }
}

PHP教程YII中日志的输出位置

PHP教程上文提到YII中日志的输出位置可以定义为很多位置.主要通过配置文件修改例如:

PHP教程
'log'=>array(
  'class'=>'CLogRouter',// uncomment the following to show log messages on web pages
    array(
      'class'=>'CWebLogRoute',

PHP教程不仅输出到日志文件中,还输出到web页面上.

PHP教程配置文件中:

PHP教程routes用于配置日志输出的位置,
class是日志,日志路由的类名
levels是日志的顶级,字符串序列,用都好分割.具体对应CLooger中的常量

PHP教程注意:

PHP教程日志文件的存放位置是:/yii_dev/testwebap/protected/runtime/application.log

PHP教程官方的日志介绍的很详细,但是后半部分中文翻译缺失了,这里进行翻译补全.

PHP教程Yii 提供了一个灵活可扩展的日志功能.记录的日志 可以通过日志级别和信息分类进行归类.通过使用 级别和分类过滤器,所选的信息还可以进一步路由到 不同的目的地,例如一个文件,Email,浏览器窗口等.

PHP教程1. 信息记录

PHP教程信息可以通过 Yii::log 或 Yii::trace 记录.其 区别是后者只在当应用程序运行在 调试模式(debug mode) 中时才会记录信息.

PHP教程
Yii::log($message,$category);
Yii::trace($message,$category);

PHP教程当记录信息时,我们需要指定它的分类和级别 分类是一段格式类似于 路径别名 的字符串. 例如,如果一条信息是在 CController 中记录的,我们可以使用 system.web.CController 作为分类.信息级别应该是下列值中的一种:

PHP教程trace: 这是在 Yii::trace 中使用的级别.它用于在开发中 跟踪程序的执行流程.
info: 这个用于记录普通的信息.
profile: 这个是性能概述(profile).下面马上会有更详细的说明.
warning: 这个用于警告(warning)信息.
error: 这个用于致命错误(fatal error)信息.

PHP教程2. 信息路由

PHP教程通过 Yii::log 或 Yii::trace 记录的信息是保存在内存中的. 我们通常需要将它们显示到浏览器窗口中,或者将他们保存到一些 持久存储例如文件、Email中.这个就叫作 信息路由,例如,发送信息到不同的目的地.

PHP教程在 Yii 中,信息路由是由一个叫做 CLogRouter 的应用组件管理的. 它负责管理一系列称作 日志路由 的东西.每个日志路由 代表一个单独的日志目的地.通过一个日志路由发送的信息会被他们的级别和分类过滤.

PHP教程要使用信息路由,我们需要安装并预加载一个 CLogRouter 应用组件.我们也还需要配置它的 routes 属性为我们想要的那些日志路由. 下面的代码演示了一个所需的 应用配置 示例:

PHP教程
array(
  ......
  'preload'=>array('log'),'components'=>array(
    ......
    'log'=>array(
      'class'=>'CLogRouter','routes'=>array(
        array(
          'class'=>'CFileLogRoute','levels'=>'trace,info','categories'=>'system.*',array(
          'class'=>'CEmailLogRoute','emails'=>'admin@example.com',)

PHP教程在上面的例子中,我们定义了两个日志路由.第一个是 CFileLogRoute,它会把信息保存在位于应用程序 runtime 目录中的一个文件中. 而且只有级别为 trace 或 info 、分类以 system. 开头的信息才会被保存. 第二个路由是 CEmailLogRoute,它会将信息发送到指定的 email 地址,且只有级别为 error 或 warning 的才会发送.

PHP教程在 Yii 中,有下列几种日志路由可用:

PHP教程CDbLogRoute: 将信息保存到数据库的表中.
CEmailLogRoute: 发送信息到指定的 Email 地址.
CFileLogRoute: 保存信息到应用程序 runtime 目录中的一个文件中.
CWebLogRoute: 将 信息 显示在当前页面的底部.
CProfileLogRoute: 在页面的底部显示概述(profiling)信息.

PHP教程信息: 信息路由发生在当前哀求周期最后的 onEndRequest 事件触发时. 要显式终止当前哀求过程,请调用 CApplication::end() 而不是使用 die() 或 exit(),因为 CApplication::end() 将会触发onEndRequest 事件,这样信息才会被顺利地记录.

PHP教程3. 信息过滤

PHP教程正如我们所提到的,信息可以在他们被发送到一个日志路由之前通过它们的级别和分类过滤. 这是通过设置对应日志路由的 levels 和 categories 属性完成的. 多个级别或分类应使用逗号连接.

PHP教程由于信息分类是类似 xxx.yyy.zzz 格式的,我们可以将其视为一个分类层级. 具体地,我们说 xxx 是 xxx.yyy的父级,而xxx.yyy 又是 xxx.yyy.zzz 的父级. 这样我们就可以使用 xxx.* 表示分类 xxx 及其所有的子级和孙级分类

PHP教程4. 记录上下文信息

PHP教程从版本 1.0.6 起,我们可以设置记录附加的上下文信息,比如 PHP 的预定义变量(例如 $_GET,$_SERVER),session ID,用户名等. 这是通过指定一个日志路由的 CLogRoute::filter属性为一个合适的日志过滤规则实现的.

PHP教程The framework comes with the convenient CLogFilter that may be used as the needed log filter in most cases. By default,CLogFilter will log a message with variables like $_GET,$_SERVER which often contains valuable system context information. CLogFilter can also be configured to prefix each logged message with session ID,username,etc.,which may greatly simplifying the global search when we are checking the numerous logged messages.

PHP教程框架可能在许多数情况下会用到日志过滤器CLogFilter来过滤日志.默认情况下,CLogFilter日志消息包含了许多系统上下文信息的变量,像$ _GET,$_SERVER. CLogFilter也可以配置的前缀与会话ID,用户名等,我们在检查无数记录的消息每个记录的消息时,这可能会极大地简化了搜索难度

PHP教程The following configuration shows how to enable logging context information. Note that each log route may have its own log filter. And by default,a log route does not have a log filter.

PHP教程下面的配置显示了如何启用日志记录的上下文信息.请注意,每个日志路由可能有其自己的日志过滤器. 默认情况下,日志路由不会有日志筛选器.

PHP教程
array(
  ......
  'preload'=>array('log'),'levels'=>'error','filter'=>'CLogFilter',...other log routes...
      ),)

PHP教程Starting from version 1.0.7,Yii supports logging call stack information in the messages that are logged by calling Yii::trace. This feature is disabled by default because it lowers performance. To use this feature,simply define a constant named YII_TRACE_LEVEL at the beginning of the entry script (before includingyii.php) to be an integer greater than 0. Yii will then append to every trace message with the file name and line number of the call stacks belonging to application code. The number YII_TRACE_LEVEL determines how many layers of each call stack should be recorded. This information is particularly useful during development stage as it can help us identify the places that trigger the trace messages.

PHP教程从版本1.0.7开始,Yii的日志记录可以采用堆栈的方式记录消息,此功能默认是关闭的,因为它会降低性能.要使用此功能,只需在入口脚本(前includingyii.php)定义一个命名为YII_TRACE_LEVEL的常量即一个大于0的整数. Yii将在堆栈信息中追加应用程序要到的每一个文件名和行号.可以通过设置YII_TRACE_LEVEL来设定堆栈的层数.这种方式在开发阶段特别有用,因为它可以赞助我们确定触发跟踪消息的地方.

PHP教程5. Performance Profiling 性能分析

PHP教程Performance profiling is a special type of message logging. Performance profiling can be used to measure the time needed for the specified code blocks and find out what the performance bottleneck is.

PHP教程性能分析是一类特殊类型的消息记录.性能分析可用于测量指定代码块所需的时间,并找出性能瓶颈是什么.

PHP教程To use performance profiling,we need to identify which code blocks need to be profiled. We mark the beginning and the end of each code block by inserting the following methods:

PHP教程要使用性能分析日志,我们需要确定哪些代码块需要分析.我们要在分析性能的代码短的开始和结尾添加如下办法:

PHP教程
Yii::beginProfile('blockID');
...code block being profiled...
Yii::endProfile('blockID');

PHP教程where blockID is an ID that uniquely identifies the code block.

PHP教程其中blockID是一个标识代码块的唯一ID.

PHP教程Note,code blocks need to be nested properly. That is,a code block cannot intersect with another. It must be either at a parallel level or be completely enclosed by the other code block.

PHP教程注意,这些办法不能交叉嵌套

PHP教程To show profiling result,we need to install a CLogRouter application component with a CProfileLogRoute log route. This is the same as we do with normal message routing. The CProfileLogRoute route will display the performance results at the end of the current page.

PHP教程为了显示分析结果,我们需要为CLogRouter增加CProfileLogRoute路由.然后通过CProfileLogRoute可以把性能测试结果显示在当前页面结束.

PHP教程6. Profiling SQL Executions 分析SQL执行

PHP教程Profiling is especially useful when working with database since SQL executions are often the main performance bottleneck of an application. While we can manually insert beginProfile and endProfilestatements at appropriate places to measure the time spent in each SQL execution,starting from version 1.0.6,Yii provides a more systematic approach to solve this problem.

PHP教程在数据库开发中分析是特别有用的,因为SQL执行往往是应用程序的主要性能瓶颈.尽管我们可以手动在每个SQL执行的适当的地方插入beginProfile和endProfile来衡量花费的时间,但从1.0.6版本开始,Yii提供了更系统的办法来解决这个问题.

PHP教程By setting CDbConnection::enableProfiling to be true in the application configuration,every SQL statement being executed will be profiled. The results can be readily displayed using the aforementionedCProfileLogRoute,which can show us how much time is spent in executing what SQL statement. We can also call CDbConnection::getStats() to retrieve the total number SQL statements executed and their total execution time.

PHP教程再实际的应用程序当中通过设置CDbConnection::enableProfiling爱分析每一个正在执行的SQL语句.使用 CProfileLogRoute,结果可以很容易地显示.它可以显示我们是在执行什么SQL语句花费多少时间.我们也可以调用CDbConnection:getStats()来分析检索SQL语句的执行总数和其总的执行时间.

PHP教程更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

PHP教程希望本文所述对大家基于Yii框架的PHP程序设计有所赞助.

《PHP实例:YII Framework框架教程之日志用法详解》是否对您有启发,欢迎查看更多与《PHP实例:YII Framework框架教程之日志用法详解》相关教程,学精学透。编程之家 jb51.cc为您提供精彩教程。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Online Tours & Travels Management System pay.php sql injectionLine 16 of pay.php invokes a SQL query built using unvalidated input. This call could allow an attacker to modify the statement’s meaning or to execute arbitrary SQL commands.SQL
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在windwos系统搭建typecho博客+cpolar内网穿透工具将博客发布到公共网络环境,实现远程也可以访问和操作。_windows搭建typecho
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代语法,让php更加的优雅的与html生活在一起 -->请放心, 最终生成的,或者说用户最终看到的,仍然是一个html文档, php代码中的内容不会被泄漏的。-- 将php与html代码混编的时候,大括号很容易造成配对错误,最好杜绝它 -->php标签内部代码由php.exe解释, php标签之外的代码原样输出,仍由web服务器解析。-- 所以php的流程控制语句, 都提供了替代语法,用冒号代替大括号 -->php echo '百变鹏仔'?_利用php将静态页面修改为动态页面
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔记博文内容涉及 Linux network namespace 认知以及彼此通信Demo,实际中的应用理解不足小伙伴帮忙指正不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树。_linux network namespace 多端通信 模式认知
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了一个逻辑二层(L2)网络,该网络封装在跨 Kubernetes 集群节点的现有三层(L3)网络拓扑上。使用此模型,可以为容器提供一个隔离的 L2 网络,而无需分发路由。封装网络带来了少量的处理开销以及由于覆盖封装生成 IP header 造成的 IP 包大小增加。封装信息由 Kubernetes worker 之间的 UDP 端口分发,交换如何访问 MAC 地址的网络控制平面信息。此类网络模型中常用的封装是 VXLAN、Internet 协议安全性 (IPSec) 和 IP-in-IP。_k8s网络组件对比
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安全时,我们正在讨论的是保护我们的在线空间,这是我们所有人的共享责任。网络安全涉及保护我们的信息,防止被未经授权的人访问、披露、破坏或修改。
文章浏览阅读1.3w次,点赞3次,收藏7次。尽管您可以通过 ping 命令解析出网站的 IP 地址,但是可能在浏览器中访问时仍然遇到问题,这可能是因为浏览器使用的 DNS 解析结果不同于 ping 命令使用的解析结果。可能是因为您的网络或设备上设置了防火墙,阻止了对特定网站的访问。有些国家或组织可能会对特定的域名进行屏蔽,从而阻止访问相关网站。如果您的网络使用代理服务器进行访问控制,可能会由于代理服务器的配置问题导致无法访问某些网站。即使您的网络和设备一切正常,目标网站本身可能也存在问题,例如服务器故障、维护或过载,导致无法访问。_能ping通打不开网页
文章浏览阅读839次,点赞22次,收藏19次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。
文章浏览阅读2.1k次,点赞31次,收藏22次。基于微信小程序奶茶点餐外卖系统设计与实现(PHP后台+Mysql)可行性分析毕设源代码毕业设计,数据安全和系统稳定性以及团队能力和资源配备方面都具备较好的条件。因此,该项目的可行性较高。:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;微信小程序作为一种快捷、方便的移动应用形式,成为很多用户点餐外卖的首选。项目的界面和功能都可以定制,包安装运行!项目配有对应开发文档、开题报告、任务书、PPT、论文模版等。
文章浏览阅读1.8k次,点赞52次,收藏38次。本文主要通过对系统的前台系统和后台管理系统进行了功能性需求分析,对系统的安全性和可扩展性进行了非功能性需求分析。在详细的需求分析的基础上,根据系统的功能设计确定了数据库结构,实现完整的代码编写。Lucky+Baby母婴用品网站使用 Dreamweaver、HBuilder代码编辑器、Apache服务器等开发工具,完成了系统的主要模块的页面设计和功能实现。本文展示了首页页面的实现效果图,并通过代码和页面介绍了用户注册功能、商品搜索功能、生成订单和查看我的订单功能、在线付款功能功能的实现过程。
文章浏览阅读1.5k次,点赞45次,收藏40次。本设计主要实现集人性化、高效率、便捷等优点于一身的人事信息管理系统,完成首页、系统用户、通知公告、部门信息、员工薪资、考勤签到、员工请假、招聘信息、应聘信息等功能模块。
文章浏览阅读1k次。该错误通常出现在数据库读取结果集数据时,比如当我们写好SQL语句从数据库读取数据时,本身应该返回结果集,再给结果集中读取数据。解决思路:这种错误一般是因为echo后面输出了一个数组导致的,或者是数组作为字符串进行拼接运算时导致的。该错误直译为:警告:mysqli_fetch_assoc函数期望参数1是mysqli的结果集,但是给了一个布尔值。这种错误是PHP解析器在解析时遇到了语法错误,直译为:解析错误:语法错误,意料之外的...该错误直译为:提示:未定义的索引:username。_array to string conversion in
文章浏览阅读2.7w次。解决http请求报错context deadline exceeded (Client.Timeout exceeded while awaiting headers)_context deadline exceeded (client.timeout exceeded while awaiting headers)
文章浏览阅读1.3k次,点赞26次,收藏24次。复杂网络是一种由大量相互连接的元素(节点或顶点)组成的网络结构,这些连接通常是非常复杂和动态的。这些网络可以在各种领域中发现,包括社交网络、生物学系统、信息技术和交通系统等。_代理建模
文章浏览阅读2.6k次,点赞76次,收藏71次。epoll详解,事件模型,ET/LT模式,并通过三个示例进行代码实现。
文章浏览阅读3.3k次。罗拉ROLA-IP是一家来自纽约的代理IP提供商,由李嘉诚先生投资建设,韩国人工智能、自动驾驶、虚拟现实方面的领军企业World IT Show投资入股,由美国纽约大学IT管理教授团队研究开发,进入中国市场6年多,全世界设有多个分子公司。接下来,我们要检查代理和防火墙的设置,因为在绝大多数情况下,它们是导致这个错误的原因,尤其是当用户使用免费代理时。对网站的访问受阻实际上是一个非常常见的错误,它既可能是由于物理原因(硬件问题)造成的,也可能是由于软件错误引起的。检查代理设置,并确保其正确配置。_无法访问此网站,检查代理服务器和防火墙
文章浏览阅读1.1k次,点赞14次,收藏20次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。_php洗车服务预约管理系统php源码
文章浏览阅读1.1k次。桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。
文章浏览阅读936次,点赞22次,收藏17次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。
文章浏览阅读822次,点赞15次,收藏14次。在整个设计过程中,要确定可能的具体解决方案,以实现每一个小的最终目标,对于每一个小目标,我们首先必须了解一些相关的需求分析信息。除了以上作品下面是2023-2024年最新100套计算机专业原创的毕业设计源码+数据库,是近期作品,如果你的题目刚好在下面可以文末领取java源码参考。springboot基于springboot的在线考试系统。springboot基于springboot的商城购物系统。springboot基于微信小程序的智慧校园设计与实现。springboot基于用户的协同过滤算法的话题推荐。