详细的介绍查看官网的document:http://www.yiiframework.com/doc/guide/1.1/en/topics.logging

也可以看 Yii 1.1 Application Development Cookbook     这本书很好

默认的日志是输出到protected/runtime/application.log

如果需要修改那么需要在main.php里面增加log配置,如下:

'components' => array( 
        'log'=>array( 
            'class'=>'CLogRouter', 
            'routes'=>array(

array( 
                     'class'=>'CFileLogRoute', 
                     'levels'=>'trace, info, debug, warn, error, fatal, profile', 
                     'categories'=>'test.*', 
                     'maxFileSize'=>1048576,
                     'logFile'=>'test.log', 
                 ), 
                  // 
  
               //                开发过程中所有日志直接输出到浏览器了,这样不需要登录服务器看日志了

array( 
                    'class' => 'CWebLogRoute', 
                    'categories' => 'test.*', 
                    'levels' => CLogger::LEVEL_PROFILE, 
                    'showInFireBug' => true, 
                    'ignoreAjaxInFireBug' => true, 
                ), 
                array( 
                    'class' => 'CWebLogRoute', 
                    'categories' => 'test.* ', 
                ),

array( 
                    'class'=>'CEmailLogRoute', 
                    'levels'=>'error, warning', 
                    'emails'=>'admin@example.com', 
                ), 
            ), 
        ), 
  
    ),

如果在某处调用了Yii::log("jdkshgds","info",'test.xx');

这个log首先被记录在了内存中一个CLogger类的array中,然后会逐一的判断每个LogRoute,判断是否需要输出,注意是逐一判断,不是其中一个输出下一个就不管了。

拿上面的配置来说:

第一个CFileLogRoute,'categories'=>'test.*',levels里包含了info, test.xx满足条件,所以会执行,将这条log输出到test.log中。

YII中日志的基本使用:

可以通过YII提供的Yii::log和Yii::trace进行日志信息的输出

函数定义

  1. public static function trace($msg,$category='application')
  2. {
  3. if(YII_DEBUG)
  4. self::log($msg,CLogger::LEVEL_TRACE,$category);
  5. }
  6. public static function log($msg,$level=CLogger::LEVEL_INFO,$category='application')
  7. {
  8. if(self::$_logger===null)
  9. self::$_logger=new CLogger;
  10. if(YII_DEBUG && YII_TRACE_LEVEL>0 && $level!==CLogger::LEVEL_PROFILE)
  11. {
  12. $traces=debug_backtrace();
  13. $count=0;
  14. foreach($traces as $trace)
  15. {
  16. if(isset($trace['file'],$trace['line']) && strpos($trace['file'],YII_PATH)!==0)
  17. {
  18. $msg.="\nin ".$trace['file'].' ('.$trace['line'].')';
  19. if(++$count>=YII_TRACE_LEVEL)
  20. break;
  21. }
  22. }
  23. }
  24. self::$_logger->log($msg,$level,$category);
  25. }

日志信息的级别:

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

使用方法:

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

示例: 
需先在main.php中进行配置,例子选择将日志存储在文件(系统默认为webapp\protected\runtime\application.log)中,为只存储trace和error级别,过滤以orange开始的log。

  1. 'components'=>array(
  2. ...............
  3. 'log'=>array(
  4. 'class'=>'CLogRouter',
  5. 'routes'=>array(
  6. array(
  7. 'class'=>'CFileLogRoute',
  8. 'levels'=>'trace,error',
  9. 'categories'=>'orange.*'
  10. ),
  11. ),
  12. ),
  13. ...............
  14. )

在控制器中定义方法并执行,在此为OrangeController控制器

  1. public function actionTest(){
  2. Yii::log('This is a  trace log','trace','orange.test');
  3. }

执行以后可在日志文件中看到我们的trace信息,为

    1. 2012/09/28 15:40:11 [trace] [orange.test] This is a  trace log
    2. in D:\PHP\www\yii\orange\protected\controllers\OrangeController.php (24)
 

Yii 日志组件的更多相关文章

  1. (转)Yii的组件机制之一:组件基础类CComponent分析

    Yii的组件机制 组件机制,是Yii整个体系的思想精髓,在使用Yii之前,最应该先了解其组件机制,如果不了解这个机制,那么阅读Yii源代码会非常吃力.组件机制给Yii框架赋予了无穷的灵活性和可扩展性, ...

  2. yii日志保存机制

    一.修改yii框架的配置文件(main.php) 'log' => array( 'class' => 'CLogRouter', 'routes' => array( array( ...

  3. .NetCore中的日志(1)日志组件解析

    .NetCore中的日志(1)日志组件解析 0x00 问题的产生 日志记录功能在开发中很常用,可以记录程序运行的细节,也可以记录用户的行为.在之前开发时我一般都是用自己写的小工具来记录日志,输出目标包 ...

  4. C#组件系列———又一款日志组件:Elmah的学习和分享

    前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...

  5. java日志组件介绍(common-logging,log4j,slf4j,logback )

    转自:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging是apache提供的一个通用的日志 ...

  6. 你的日志组件记录够清晰嘛?--自己开发日志组件 Logger

    现在现成的日志组件实在是太多太多,为什么我还需要自己实现呢????? 需求来源于java的log4j, [07-31 16:40:00:557:WARN : com.game.engine.threa ...

  7. 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)

    回到目录 之前的讲过两篇关于日志组件的文章,分别是<第一回  日志记录组件之自主的Vlog>和<第三回  日志记录组件之log4net>,而今天主要说一下我自己开发的另一种日志 ...

  8. 快速入门系列--Log4net日志组件

    Log4net是阿帕奇基金会的非常流行的开源日志组件,是log4j的.NET移植版本,至今已经有11年的历史,使用方便并且非常稳定,此外很重要的一点是其和很多开源组件能很好的组合在一起工作,例如NHi ...

  9. Node 进阶:express 默认日志组件 morgan 从入门使用到源码剖析

    本文摘录自个人总结<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 章节概览 morgan是express默认的日志中间件, ...

随机推荐

  1. WAMP环境配置-PHP安装

    我这次环境配置安装的是php-5.6.25版本! (最近我在反复安装PHP的时候出现了一个问题,httpd.conf加载php5apache2_4.dll出现错误,怎么修改都不行,此时我安装的是VC1 ...

  2. C# WinForm API 改进单实例运行

    在普通的单实例中,第二次点击软件快捷方式的时候,往往简单提示"系统已经运行",而不是把第一次打开的软件主窗体显示出来,下面演示如果主窗体已经打开则把第一次打开的主窗体放置到最前面; ...

  3. mybatis mapper调用mysql存储过程

    mybatis版本:3.4.4 存储过程 1.mapper.xml文件中配置相关的sql语句. <select id="callTest" statementType=&qu ...

  4. SPDY和HTTP

    SPDY 是什么 ? SPDY 是 Google 开发的基于传输控制协议 (TCP) 的应用层协议.SPDY 协议旨在通过压缩.多路复用和优先级来缩短网页的加载时间和提高安全性.(SPDY 是 Spe ...

  5. C#学习笔记14

    1.在多个线程的同步数据中,避免使用this.typeof(type).string进行同步锁,使用这3个容易造成死锁. 2.使用Interlocked类:我们一般使用的互斥锁定模式(同步数据)为Lo ...

  6. php从身份证获取性别和出生年月

    //通过身份证号查询出性别与生日 $birth = strlen($idcard)==15 ? ('19' . substr($idcard, 6, 6)) : substr($idcard, 6, ...

  7. innerHTML、innerText、outerHTML、textContent的区别

    示例html代码: <div id="test"> <span style="color:red">test1</span> ...

  8. 2D平面中关于矩阵(Matrix)跟图形变换的讲解

    在二维平面上,常用的有以下三种基本的图形变化: 1)Translation 2)Scale 3)Rotation 在canvas的开发中,我们也经常会用到这样的一些图形变换,尤其是我们在写自定义Vie ...

  9. 题目一:使用Java实现二维数组中的查找

    考点:数组       题目:二维数组中的查找   描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判 ...

  10. QT 定时执行某个函数,隐藏某个控件

    QTimer::singleShot(3000, this, SLOT(slotHideFinishedLabel())); // 这里是一个3秒定时器, 且只执行一次. #include " ...