• yii中将log存入数据库是修改原有风格


    YII是提供修改输出参数格式的,但是可供用户定制化的空间非常小。

    如想把prefix中的userID和ip分别插入到数据库中不同的两列,就需要需改框架文件:

    /basic/vendor/yiisoft/yii2/log/Target与/basic/vendor/yiisoft/yii2/log/DbTarget如下:

     9     public function getMessagePrefixCustomized($message)
    10     {
    11         if ($this->prefix !== null) {
    12             return call_user_func($this->prefix, $message);
    13         }
    14 
    15         if (Yii::$app === null) {
    16             return '';
    17         }
    18 
    19         $request = Yii::$app->getRequest();
    20         $ip = $request instanceof Request ? $request->getUserIP() : '-';
    21 
    22         /* @var $user yiiwebUser */
    23         $user = Yii::$app->has('user', true) ? Yii::$app->get('user') : null;
    24         if ($user && ($identity = $user->getIdentity(false))) {
    25             $userID = $identity->getId();
    26         } else {
    27             $userID = '-';
    28         }
    29 
    30         /* @var $session yiiwebSession */
    31         $session = Yii::$app->has('session', true) ? Yii::$app->get('session') : null;
    32         $sessionID = $session && $session->getIsActive() ? $session->getId() : '-';
    33 
    34         $results = array('ip' => $ip, 'userID' => $userID, 'sessionID' => $sessionID);
            //return "[$ip][$userID][$sessionID]";
    35 return $results;//原来是返回一个string这里返回一个数组 36 }


     1     public function export()
     2     {
     3         $tableName = $this->db->quoteTableName($this->logTable);
     4         $sql = "INSERT INTO $tableName ([[level]], [[category]], [[log_time]], [[message]], [[IP]], [[customerID]])
     5                 VALUES (:level, :category, :log_time, :message, :IP, :customerID)";//在这里修改在数据库中要显示的字段
     6         $command = $this->db->createCommand($sql);
     7         foreach ($this->messages as $message) {
     8             list($text, $level, $category, $timestamp) = $message;
     9             if (!is_string($text)) {
    10                 $text = VarDumper::export($text);
    11             }
    12             $command->bindValues([
    13                 ':level' => $level,
    14                 ':category' => $category,
    15                 ':log_time' => date('Y-m-d H:i:s'),//如需修改时间戳格式在这里修改
    16                 ':customerID' => $this->getMessagePrefixCustomized($message)['userID'],//从上边的函数里边的返回值
    17                 ':IP' => $this->getMessagePrefixCustomized($message)['ip'],
    18                 ':message' => $text,
    19             ])->execute();
    20         }
    21     }
  • 相关阅读:
    测试用例设计之正交实验法
    Jmeter 添加性能监控器
    jmeter常用的性能测试监听器
    常用的性能测试策略
    nmon定位性能问题之数据库问题定位
    性能测试基础知识
    Electorn(桌面应用)自动化测试之Java+selenium实战例子
    Mybatis查询为空,但是数据库中有结果集!
    Spring中使用Mybatis逆向工程(IDEA版)
    Spring配置Quartz的三种方式
  • 原文地址:https://www.cnblogs.com/wlemory/p/4745183.html
Copyright © 2020-2023  润新知