• Yii::记录日志到自定义文件


    默认情况下,Yii::log($msg, $level, $category)会把日志记录到runtime/application.log文件中

    日志格式如下:

    [时间] - [级别] - [类别] - [内容]

    2013/05/03 17:33:08 [error] [application] test  

    但有时候需要把某些特定的日志放到特定的文件中,比如交易失败的日志,需要和其他日志区分开来单独记录。

    在Yii中可以通过配置不同的CLogRouter来解决。

    你需要先了解Yii的日志机制,Yii的日志功能有CLogger和CLogRouter两部分,

    其中CLogger负责记录日志数据在内存中,而CLogRouter则决定如何处理这些日志数据,如记录到文件或数据库,或发送邮件等

    其中的CFileLogRoute就是用来以文件的形式来处理日志数据的。那么很自然的,通过配置不同的CFileLogRoute就可以把日志记录到不同的日志文件中。

    具体配置如下:

    'log' => array(
        'class' => 'CLogRouter',
        'routes' => array(
            array(
                'class' => 'CFileLogRoute',
                'levels' => 'error, warning',
            ),
            array(
                'class' => 'CFileLogRoute',
                'levels' => 'error, warning',
                'categories'=> 'orders.*',
                'logFile'=> 'orders.log',
            ),

    在需要记录订单错误的地方,添加如下代码:

    $transaction = Yii::app()->db->beginTransaction ( ) ;//事务处理
    try
    {
        $add_sql ="UPDATE `ic_company` SET `comp_point` = `comp_point`+ ".$company['frozen_points']." WHERE `comp_id` =".$company['co_gov_id'];
        Yii::app()->db->createCommand($add_sql)->execute();
        $update_sql = "UPDATE `ic_point` SET `status` = 2 WHERE `co_gov_id`=".$company['co_gov_id']." AND create_time>".$freezing_time;
        Yii::app()->db->createCommand($update_sql)->execute();
        $transaction ->commit( ) ;
    }
    catch ( Exception  $e)  // an exception is raised if a query fails
    {
        $transaction ->rollBack( ) ;
        Yii::log('your message', 'error', 'orders');
    }

    完毕。

  • 相关阅读:
    我们是怎么管理QQ群的
    2014年10月【下】-前端开发半月刊
    我们一般的前端开发流程
    没有素描色彩基础适合学习UI吗,如果可以,该怎么学?
    豪情-关于生活工作学习之感悟-第一篇
    网页插件学javascript还是jquery好啊?
    我们平时是怎么写html和css的?
    2014年10月【上】-前端开发半月刊
    2014年9月-前端开发月刊
    固定滚动菜单
  • 原文地址:https://www.cnblogs.com/zl0372/p/yii_1.html
Copyright © 2020-2023  润新知