热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP开发框架YiiFramework教程(3)为应用添加日志

日志存放的位置和文件名都可以通过配置来修改,一般情况使用缺省值就可以了,和log4X类似,应用的日志可以通过路由同时写到多个目的地(文件,Email等)这些多可以通过配置来实现,具体可以参见日志记录。

在开发应用的过程中,调试也是非常重要的一个环节,除了IDE支持的即时调试(如VS.PHP或IDE支持的调试功能),给Web应 用添加适当的调试信息也是非常有用的一个方法,开发过Java或.Net 应用的对log4XX都不陌生,Yii Framework中也提供了类似 的Log功能, Yii::log,它是作为CWebApplication一个内置的组件出现的。可以通过配置文件来配置(Yii中配置通常为 protected/config/main.php)。

上篇文章Yii Framework 开发简明教程(2) Yii Web应用基础简述了应用组件。

除Log组件外,Yii 预定义了一系列核心应用组件,提供常见 Web 应用中所用的功能。例如, request 组件用于解析用户请求 并提供例如 URL,COOKIE 等信息。 通过配置这些核心组件的属性,我们可以在几乎所有的方面修改Yii 的默认行为。

下面我们列出了由 CWebApplication 预定义的核心组件。

assetManager: CAssetManager - 管理私有资源文件的发布。

authManager: CAuthManager - 管理基于角色的访问控制 (RBAC).

cache: CCache - 提供数据缓存功能。注意, 你必须指定实际的类(例如CMemCache, CDbCache)。 否则,当你访问此组件时将返回 NULL。

clientScript: CClientScript - 管理客户端脚本 (Javascripts 和 CSS).

coreMessages: CPhpMessageSource - 提供 Yii 框架用到的 核心信息的翻译。

db: CDbConnection - 提供数据库连接。注意,使用此组件你必须配置其 connectionString 属性。

errorHandler: CErrorHandler - 处理未捕获的 PHP 错误和异常。

format: CFormatter - 格式化数值显示。此 功能从版本 1.1.0 起开始提供。

messages: CPhpMessageSource - 提供Yii应用中使用的信息翻译。

request: CHttpRequest - 提供关于用户请求的信息。

securityManager: CSecurityManager - 提供安全相关的服务,例如散列, 加密。

session: CHttpSession - 提供session相关的功能。

statePersister: CStatePersister - 提供全局状 态持久方法。

urlManager: CUrlManager - 提供 URL 解析和创建相关功能

user: CWebUser - 提供当前用户的识 别信息。

themeManager: CThemeManager - 管理主题。这些组件在后面的教程中将逐步介绍。下面给出Log功能使用的基 本方法:这里我们修改Yii Framework 开发简明教程(1) 第一个应用Hello World。为其添加日志。1. 创建配置文件 protected/config/main.php希望将日志写到一个文件中,可以使用如下配置:

// This is the main Web application configuration. Any writable    
// CWebApplication properties can be configured here.    
return array(    

// preloading 'log' component    
'preload'=>array('log'),    

// application components    
'components'=>array(    

        'log'=>array(    
            'class'=>'CLogRouter',    
            'routes'=>array(    
                array(    
                    'class'=>'CFileLogRoute',    
                    'levels'=>'info,error, warning',    
                    ),    

                ),    
            ),    
        ),    

);CLogRouter 信息路由 通过 Yii::log 或 Yii::trace 记录的信息是保存在内存中的。 我们通常需要将它们显示到 浏览器窗口中,或者将他们保存到一些 持久存储例如文件、Email中。这个就叫作 信息路由。

一般使用Log功能时,需要预 先载入Log组件,这是通过preload来配置的,preload 允许应用事先载入一些模块.提示: 默认情况下,应用元件是根据需要而 创建的。这意味着一个元件只有在被访问的情况下才会创建。 因此,系统的整体性能不会因为配置了很多元件而下降。有些应 用元件,(比如CLogRouter) 是不管用不用都要创建的。在这种情况下, 我们在应用的配置文件里将这些元件的ID列上: preload。

2. 修改入口脚本index.php ,配置主应用实例使用新创建的配置文件。

$yii='C:/yiiframework/yii.php';    
// remove the following line when in production mode    
defined('YII_DEBUG') or define('YII_DEBUG',true);    
        
$cOnfig=dirname(__FILE__).'/protected/config/main.php';    
        
require_once($yii);    
Yii::createWebApplication($config)->run();3. 创建protected/runtime

因为日志文件写入的缺省目录为 protected/runtime 所以事先要创建好runtime 目录,否则Yii 将日志直接显示在网页上。

4. 这样就可以使用 Yii::log 或 Yii::trace 为应用添加日志。

其 区别是后者只在当应用程序运行在 调试模式(debug mode) 中时才会记 录信息。

Yii::log($message, $level, $category);

Yii::trace($message, $category);

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

trace: 这是在 Yii::trace 中使用的 级别。它用于在开发中 跟踪程序的执行流程。

info: 这个用于记录普通的信息。

profile: 这个是性能概述(profile) 。下面马上会有更详细的说明。

warning: 这个用于警告(warning)信息。

error: 这个用于致命错误(fatal error)信 息。

Yii 的日志通过Level和Category进行分类和过滤,正如我们所提到的, 多个级别或分类应使用逗号连接。

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

有了以 上知识,我们修改SiteController的actionIndex,添加一行日志。

public function actionIndex()
{
    Yii::log("action","info","site.action");
    $this->render("index");
}5. 运行应用,可以看到Yii在protected/runtime 创建了一个application.log

PHP开发框架Yii Framework教程(3) 为应用添加日志

其内容如下:

2012/12/11 21:23:38 [info] [site.action] action

注: 日志存放的位置和文件名都可以通过配置来修改,一般情 况使用缺省值就可以了,和log4X 类似,应用的日志可以通过路由同时写到多个目的地(文件,Email等)这些多可以通过配置 来实现,具体可以参见日志记录。



推荐阅读
  • CentOS系统下设置JDK环境变量的方法
    本文将详细介绍如何在CentOS系统中为root用户配置JDK环境变量。包括JDK的安装路径设定、环境变量的添加及验证方法。 ... [详细]
  • 基于函数实现的进制转换工具
    本文介绍了一种利用函数实现不同进制数(二进制、八进制、十进制)之间转换的方法。包括了程序的运行效果展示、所使用的主要函数解析、以及如何验证用户输入的合法性。整个项目仅使用了两个全局变量来存储用户的选项和输入的数值。 ... [详细]
  • 深度兴趣网络在点击率预测中的应用研究
    本文探讨了一种名为深度兴趣网络(Deep Interest Network, DIN)的新方法,该方法通过捕捉用户的历史行为和当前上下文之间的交互来提高点击率预测的准确性。DIN模型不仅考虑了用户的静态偏好,还动态地调整了对不同商品的兴趣权重,从而实现了更加个性化的推荐。 ... [详细]
  • 本文汇集了使用C#中不同HTTP客户端向Web API上传文件的实例,旨在为开发者提供实用的技术指南。 ... [详细]
  • 解决phpMyAdmin运行错误:mysqli_init(): 属性访问尚未允许
    本文探讨了在使用phpMyAdmin过程中遇到的mysqli_init()函数错误,并提供了有效的解决方案。 ... [详细]
  • 深入解析Java中的锁类型及其应用场景
    本文详细介绍了Java中常见的锁类型,包括乐观锁与悲观锁、独占锁与共享锁、互斥锁与读写锁、可重入锁、公平锁与非公平锁、分段锁、偏向锁、轻量级锁、重量级锁以及自旋锁。每种锁的特性、作用及适用场景均有所涉及。 ... [详细]
  • 本文介绍了如何通过安装 VirtualBox 和 Vagrant 来快速搭建和管理虚拟机环境。我们将详细探讨如何选择合适的 Box 镜像,以及如何高效地下载、添加和管理这些镜像。 ... [详细]
  • SQL注入实验:SqliLabs第38至45关解析
    本文深入探讨了SqliLabs项目中的第38至45关,重点讲解了堆叠注入(Stacked Queries)的应用技巧及防御策略。通过实际案例分析,帮助读者理解如何利用和防范此类SQL注入攻击。 ... [详细]
  • Linux 文件系统结构详解
    本文详细介绍了Linux操作系统的文件系统结构,包括其独特的树状目录体系、根目录的作用、目录与磁盘分区的关系等,并对各主要目录的功能进行了深入解析。 ... [详细]
  • KKCMS代码审计初探
    本文主要介绍了KKCMS的安装过程及其基本功能,重点分析了该系统中存在的验证码重用、SQL注入及XSS等安全问题。适合初学者作为入门指南。 ... [详细]
  • 在现代多线程编程中,Lock接口提供的灵活性和控制力超越了传统的synchronized关键字。Lock接口不仅使锁成为一个独立的对象,还提供了更细粒度的锁定机制,例如读写锁(ReadWriteLock)。本文将探讨如何利用ReentrantReadWriteLock提高并发性能。 ... [详细]
  • 本文探讨了HDU 4035的问题,涉及一个由n个房间组成的迷宫,这些房间通过n-1条隧道相互连接,形成一棵树结构。任务是从起点1号房间出发,计算到达出口所需经过的平均隧道数量,考虑了在每个房间中可能发生的三种情况及其相应概率。 ... [详细]
  • 解决fetch上传图片至微信公众号H5页面的问题
    在近期的一个项目需求中,需要在微信公众号内嵌入H5页面,并实现用户通过该页面上传图片的功能,包括拍摄新照片或从已有相册中选择。前端开发中采用了fetch API进行接口调用,但遇到了上传图片时数据无法正确传递的问题。 ... [详细]
  • 本文详细记录了《PHP与MySQL Web开发》第一章的学习心得,特别关注了PHP的基本构成元素、标记风格、编程注意事项及表单处理技巧等内容。 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
author-avatar
布瓜Pourqu2502854853
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有