婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Yii使用DbTarget實現日志功能的示例代碼

Yii使用DbTarget實現日志功能的示例代碼

熱門標簽:地圖標注符號樣式有 天客通地圖標注 公司外呼系統中心 梧州市機器人外呼系統怎么樣 菏澤語音外呼系統運營商 電子地圖標注怎么修改 臨沂crm外呼系統平臺 廈門400電話辦理選易號網 如何在世界地圖標注

一:在配置文件的log組件中配置DbTarget

'log' => [
 'traceLevel' => YII_DEBUG ? 3 : 0,
 'targets' => [
  [
   'class' => 'yii\log\FileTarget',
   'levels' => ['error', 'warning'],
  ],
  'test' => [
   'class' => 'yii\log\DbTarget',//DaTarget類
   'logTable' => '{{%test_log}}',//日志表
   'levels' => ['error', 'info', 'warning'],//日志等級
  ],
 ],
],

二:生成日志表

在項目目錄下執行如下命令生成日志表

php yii migrate --migrationPath=@yii/log/migrations/

三:使用日志

在需要使用日志的地方使用

Yii::info()

四:自定義DbTarget日志

1:首先創建一個自定義的日志表

(1)在項目目錄下執行

php yii migrate/create create_test_log

(2):在創建的migrate文件下編寫創建數據庫的遷移腳本

?php
use yii\db\Migration;
/**
 * Class m200720_091126_create_test_log
 */
class m200720_091126_create_test_log extends Migration
{
 /**
  * {@inheritdoc}
  */
 public function safeUp()
 {
  $this->createTable('{{%test_log}}', [
   'id' => $this->bigPrimaryKey(),
   'level' => $this->integer()->notNull()->comment('日志等級'),
   'category' => $this->string(100)->notNull()->comment('分類名稱'),
   'prefix' => $this->text(),
   'route' => $this->string(100)->notNull()->comment('路由'),
   'method' => $this->string(20)->notNull()->comment('請求方式'),
   'app' => $this->string(20)->comment('請求應用'),
   'module' => $this->string(20)->comment('請求模塊'),
   'request' => $this->text()->comment('請求參數'),
   'status' => $this->string(10)->notNull()->comment('狀態碼'),
   'message' => $this->text()->comment('日志內容'),
   'request_at' => $this->double()->notNull()->comment('請求時間'),
   'ip' => $this->string(63)->comment('請求IP'),
  ], 'CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE=InnoDB COMMENT=\'請求日志表'');
  //增加索引
  $this->createIndex('idx_log_level', '{{%test_log}}', 'level');
  $this->createIndex('idx_log_category', '{{%test_log}}', 'category');
  $this->createIndex('idx_log_route', '{{%test_log}}', 'route');
  $this->createIndex('idx_log_method', '{{%test_log}}', 'method');
  $this->createIndex('idx_log_status', '{{%test_log}}', 'status');
 }
 /**
  * @inheritdoc
  */
 public function safeDown()
 {
  $this->dropTable('{{%test_log}}');
 }
}

(3):執行如下命令生成DbTarget日志表

php yii migrate

2:編寫一個DbTarget類來繼承yiilogDbTarget類

?php
namespace app\components;
use Yii;
use yii\helpers\VarDumper;
use yii\log\LogRuntimeException;
use yii\web\HttpException;
use yii\web\Request;
/**
 * DbTarget stores log messages in a database table.
 *
 * @see yii\log\DbTarget
 *
 * @author wangjian
 * @since 1.0
 */
class DbTarget extends \yii\log\DbTarget
{
 /**
  * @inheritdoc
  */
 public $categories = [
  'application',
  'yii\web\HttpException:*',
 ];
 /**
  * @inheritdoc
  */
 public $except = [
  // 'yii\web\HttpException:404',
 ];
 /**
  * @inheritdoc
  */
 public $logVars = ['_GET', '_POST'];
 /**
  * @var string 用戶組件ID
  */
 public $userComponentId = 'user';
 /**
  * @inheritdoc
  */
 public function collect($messages, $final)
 {
  $this->messages = array_merge($this->messages, static::filterMessages($messages, $this->getLevels(), $this->categories, $this->except));
  $count = count($this->messages);
  if ($count > 0  ($final || $this->exportInterval > 0  $count >= $this->exportInterval)) {
   $oldExportInterval = $this->exportInterval;
   $this->exportInterval = 0;
   $this->export();
   $this->exportInterval = $oldExportInterval;
   $this->messages = [];
  }
 }
 /**
  * @inheritdoc
  */
 public function getMessagePrefix($message)
 {
  if ($this->prefix !== null) {
   return call_user_func($this->prefix, $message);
  }
  if (Yii::$app === null) {
   return '';
  }
  $ip = $this->getIp();
  $ip = empty($ip) ? '-' : $ip;
  return "[$ip]";
 }
 /**
  * @inheritdoc
  */
 public function export()
 {
  if ($this->db->getTransaction()) {
   $this->db = clone $this->db;
  }
  $tableName = $this->db->quoteTableName($this->logTable);
  $sql = "INSERT INTO $tableName ([[level]], [[category]], [[prefix]], [[route]], [[method]], [[app]], [[module]], [[request]], [[status]], [[message]], [[request_at]], [[ip]])
    VALUES (:level, :category, :prefix, :route, :method, :app, :module, :request, :status, :message, :request_at, :ip)";
  $command = $this->db->createCommand($sql);
  $request = Yii::$app->getRequest();
  list($route, $params) = $request->resolve();
  $method = $request->getMethod();
  $module = Yii::$app->controller->module->id;
  $route = str_replace("{$module}/", '', $route);
  foreach ($this->messages as $message) {
   list($text, $level, $category, $timestamp) = $message;
   $statusCode = 200;
   if (!is_string($text)) {
    if ($text instanceof \Throwable || $text instanceof \Exception) {
     $statusCode = $text instanceof HttpException ? $text->statusCode : 500;
     $text = $text->getMessage();
    } else {
     $text = VarDumper::export($text);
    }
   }
   if ($command->bindValues([
     ':level' => $level,
     ':category' => $category,
     ':prefix' => $this->getMessagePrefix($message),
     ':route' => $route,
     ':method' => $method,
     ':app' => Yii::$app->id,
     ':module' => $module,
     ':request' => $this->getContextMessage(),
     ':status' => $statusCode,
     ':message' => $text,
     ':request_at' => $timestamp,
     ':ip' => $this->getIp(),
    ])->execute() > 0) {
    continue;
   }
   throw new LogRuntimeException('Unable to export log through database!');
  }
 }
 /**
  * 獲取當前IP
  */
 protected function getIp()
 {
  $request = Yii::$app->getRequest();
  return $request instanceof Request ? $request->getUserIP() : '';
 }
}

3:在配置文件中將yiilogDbTarget類改成我們自定義的類

'log' => [
 'traceLevel' => YII_DEBUG ? 3 : 0,
 'targets' => [
  [
   'class' => 'yii\log\FileTarget',
   'levels' => ['error', 'warning'],
  ],
  'test' => [
   'class' => 'app\components\DbTarget',
   'logTable' => '{{%test_log}}',
   'levels' => ['error', 'info', 'warning'],
  ],
 ],
],

4:使用DbTarget日志

同樣的使用Yii::info來記錄日志

到此這篇關于Yii使用DbTarget實現日志功能的示例代碼的文章就介紹到這了,更多相關Yii DbTarget 日志內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • YII2框架中日志的配置與使用方法實例分析
  • Yii框架日志操作圖文與實例詳解
  • Yii框架日志記錄Logging操作示例
  • Yii框架實現記錄日志到自定義文件的方法
  • Yii2框架中日志的使用方法分析
  • 全面解讀PHP的Yii框架中的日志功能
  • YII Framework框架教程之日志用法詳解
  • PHP的Yii框架的常用日志操作總結
  • 詳解PHP的Yii框架中日志的相關配置及使用

標簽:郴州 白城 迪慶 瀘州 雞西 黃石 綿陽 貴陽

巨人網絡通訊聲明:本文標題《Yii使用DbTarget實現日志功能的示例代碼》,本文關鍵詞  Yii,使用,DbTarget,實現,日志,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Yii使用DbTarget實現日志功能的示例代碼》相關的同類信息!
  • 本頁收集關于Yii使用DbTarget實現日志功能的示例代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品一区久久久久| 精品一区二区三区在线播放| 国产精品久久久久毛片软件| 日韩黄色小视频| 在线观看欧美日本| 国产精品久久久久一区二区三区共 | 精品久久一二三区| 一本一本大道香蕉久在线精品| 亚洲综合一二区| 99久久亚洲一区二区三区青草| 久久免费视频色| 免费在线视频一区| 日韩一级大片在线| 久色婷婷小香蕉久久| 欧美精品欧美精品系列| www.欧美日韩国产在线| 麻豆精品在线播放| 日韩免费在线观看| 狠狠色综合播放一区二区| 久久久影院官网| 不卡欧美aaaaa| 中文字幕一区二区三区在线观看 | 亚洲女子a中天字幕| 亚洲三级在线免费观看| 成人动漫在线一区| 亚洲精品乱码久久久久久日本蜜臀| av中文字幕亚洲| 亚洲另类中文字| 欧美无人高清视频在线观看| 美日韩黄色大片| 日本一区二区在线不卡| 在线观看成人免费视频| 免费看欧美女人艹b| 国产蜜臀97一区二区三区 | 亚洲一区日韩精品中文字幕| 国产精品亚洲午夜一区二区三区| 亚洲丝袜自拍清纯另类| 激情成人综合网| 在线观看日韩高清av| 日本亚洲天堂网| 久久久久久电影| 色婷婷综合久久| 精品一区二区三区在线视频| 中文字幕一区二区三区四区不卡 | 久久精品国产澳门| 国产精品美女一区二区三区| 欧美高清视频在线高清观看mv色露露十八| 老色鬼精品视频在线观看播放| 欧美国产国产综合| 日本最新不卡在线| 精品视频在线视频| 国产欧美一区二区精品性色| 国产精品丝袜久久久久久app| 国产乱码字幕精品高清av | 日韩一区二区三区高清免费看看| 国产乱子轮精品视频| 欧美一区二区三区电影| 成人精品视频一区二区三区| 蜜桃av噜噜一区二区三区小说| 欧美国产日韩精品免费观看| 日韩区在线观看| 欧美少妇一区二区| 91美女在线观看| 成人激情视频网站| 成人激情免费电影网址| 狠狠久久亚洲欧美| 免费观看成人av| 免费一级欧美片在线观看| 日本大胆欧美人术艺术动态| 亚洲麻豆国产自偷在线| 中文字幕不卡三区| 久久综合久久综合久久综合| 91精品国产一区二区三区蜜臀| 欧美色精品在线视频| 在线看日本不卡| 91麻豆高清视频| 日本电影亚洲天堂一区| 欧美在线视频全部完| 在线观看国产一区二区| 在线免费观看日韩欧美| 欧美日韩免费一区二区三区视频| 欧美色精品在线视频| 在线播放中文一区| 欧美成人高清电影在线| 欧美高清视频一二三区 | 99re热视频精品| 成人黄色国产精品网站大全在线免费观看| 国产成人免费高清| 一本久道久久综合中文字幕| 91免费看片在线观看| 日韩精品一区二区三区四区 | 成人v精品蜜桃久久一区| 国产91对白在线观看九色| 久久99最新地址| 风间由美中文字幕在线看视频国产欧美| 国产精品99久久久久久似苏梦涵 | 欧美tickling网站挠脚心| 久久―日本道色综合久久| 国产天堂亚洲国产碰碰| 一区免费观看视频| 亚洲第一电影网| 美女一区二区三区| 国产sm精品调教视频网站| 91网站在线播放| 91麻豆精品国产91久久久资源速度 | 91一区在线观看| 欧美精品日韩一区| 国产精品乱码一区二三区小蝌蚪| 一个色综合网站| 久久精品国产成人一区二区三区| 国产精品一二三在| 在线播放亚洲一区| 国产精品国产自产拍在线| 视频在线在亚洲| 在线亚洲欧美专区二区| 欧美一区二区三区在线观看 | 极品瑜伽女神91| jiyouzz国产精品久久| 91精品国产综合久久香蕉的特点| 国产日产亚洲精品系列| 午夜欧美电影在线观看| 成人午夜电影久久影院| 亚洲精品在线免费播放| 亚洲综合无码一区二区| 国产一区二区电影| 91精品国产综合久久婷婷香蕉 | 欧美一级欧美一级在线播放| 国产区在线观看成人精品| 无码av中文一区二区三区桃花岛| 国产精品一区二区在线观看不卡| 日韩一区二区三区三四区视频在线观看 | 日韩高清不卡一区二区三区| 91蜜桃在线观看| 国产精品久久久久久久裸模| 久久精品国产免费| 精品久久人人做人人爽| 亚洲男同性视频| 99精品视频免费在线观看| 国产精品日韩成人| 国精产品一区一区三区mba桃花| 6080国产精品一区二区| 午夜激情久久久| 欧美亚洲综合色| 亚洲色大成网站www久久九九| 成人免费不卡视频| 久久久不卡网国产精品二区| 国产精品99精品久久免费| 日韩午夜精品电影| 国产在线视视频有精品| 久久嫩草精品久久久精品一| 高清不卡一区二区在线| 日本一区二区三区国色天香 | 中文字幕二三区不卡| 久久99国产精品免费网站| 亚洲精品少妇30p| 国产mv日韩mv欧美| 国产精品久久国产精麻豆99网站| 国产aⅴ综合色| 欧美激情在线一区二区三区| 99热在这里有精品免费| 综合激情成人伊人| 91亚洲精品一区二区乱码| 亚洲精品国产精品乱码不99| 欧美狂野另类xxxxoooo| 另类小说一区二区三区| 久久蜜桃一区二区| 蜜臀a∨国产成人精品| 精品三级av在线| 91在线丨porny丨国产| 性欧美疯狂xxxxbbbb| 精品久久国产字幕高潮| 成人aaaa免费全部观看| 亚洲成av人片一区二区三区| 亚洲欧美另类小说视频| 午夜成人免费视频| 日韩欧美激情四射| 成人h动漫精品一区二区| 亚洲猫色日本管| 久久精品日韩一区二区三区| 91亚洲精品久久久蜜桃网站| 青青草91视频| 国产精品久久一卡二卡| 制服视频三区第一页精品| 国产精品18久久久久久久网站| 亚洲精品你懂的| 久久在线免费观看| 欧美高清激情brazzers| 播五月开心婷婷综合| 蜜桃一区二区三区在线观看| 亚洲视频资源在线| 国产三级欧美三级| 日韩欧美自拍偷拍| 欧美私模裸体表演在线观看| 国产伦精品一区二区三区免费迷 | 欧美日韩精品电影| 国产高清在线精品| 日本网站在线观看一区二区三区 | 蜜臀av性久久久久蜜臀av麻豆| 亚洲免费毛片网站| 欧美激情一区二区|