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');
    }

    完毕。

  • 相关阅读:
    (网页)html中页面传递参数不用cookie不用缓存,js方法搞定
    (网页)table加上分页,优点可随便加样式
    (后端)分页比较好的语句
    (后端)Spring手动回滚事务
    jquery 插件开发
    mysql 触发器
    mysql 存储过程
    YaHoo 前端优化军规
    html5 离线存储
    java 网络编程
  • 原文地址:https://www.cnblogs.com/zl0372/p/yii_1.html
Copyright © 2011-2022 走看看