zoukankan      html  css  js  c++  java
  • 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');
    }

    完毕。

  • 相关阅读:
    .NET分布式架构开发实战之一 故事起源
    .NET 分布式架构开发实战之三 数据访问深入一点的思考
    .NET 分布式架构开发实战之二 草稿设计
    .NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇)
    跨域SSO的实现之一:架构设计
    .NET下实现分布式缓存系统Memcached
    第一章 .NET的原理(2.0)
    Memcache协议中文版
    Excel数据导入Axapta中
    SQL Server2000的安装
  • 原文地址:https://www.cnblogs.com/zl0372/p/yii_1.html
Copyright © 2011-2022 走看看