校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

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

Yii使用DbTarget實現(xiàn)日志功能的示例代碼

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

一:在配置文件的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'],//日志等級
  ],
 ],
],

二:生成日志表

在項目目錄下執(zhí)行如下命令生成日志表

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

三:使用日志

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

Yii::info()

四:自定義DbTarget日志

1:首先創(chuàng)建一個自定義的日志表

(1)在項目目錄下執(zhí)行

php yii migrate/create create_test_log

(2):在創(chuàng)建的migrate文件下編寫創(chuàng)建數(shù)據(jù)庫的遷移腳本

?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('請求參數(shù)'),
   'status' => $this->string(10)->notNull()->comment('狀態(tài)碼'),
   'message' => $this->text()->comment('日志內(nèi)容'),
   '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):執(zhí)行如下命令生成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來記錄日志

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

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

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

巨人網(wǎng)絡通訊聲明:本文標題《Yii使用DbTarget實現(xiàn)日志功能的示例代碼》,本文關(guān)鍵詞  Yii,使用,DbTarget,實現(xiàn),日志,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Yii使用DbTarget實現(xiàn)日志功能的示例代碼》相關(guān)的同類信息!
  • 本頁收集關(guān)于Yii使用DbTarget實現(xiàn)日志功能的示例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲第一福利一区| 一区二区三区日韩欧美| 国产精品久久午夜| 高清日韩电视剧大全免费| 久久久99精品免费观看| 国产精品一区免费在线观看| 中文字幕免费不卡在线| 99v久久综合狠狠综合久久| 亚洲激情图片小说视频| 日韩一区二区三区在线观看| 国产suv精品一区二区6| 亚洲乱码日产精品bd| 欧美一级黄色录像| 国产精品一区免费视频| 亚洲图片欧美视频| 2024国产精品视频| 在线视频欧美精品| 久久成人久久鬼色| 一区二区三区中文字幕| 欧美日韩成人高清| 不卡一卡二卡三乱码免费网站| 亚洲精品国产成人久久av盗摄| 欧美一级久久久| 91麻豆免费视频| 国产成人在线看| 亚洲第一搞黄网站| 欧美国产成人在线| 9191久久久久久久久久久| 成人性生交大合| 亚洲国产精品久久人人爱| 欧美国产综合色视频| 91精品国产综合久久精品图片| 97精品视频在线观看自产线路二| 久久精品噜噜噜成人88aⅴ| 亚洲欧美激情一区二区| 中文字幕av在线一区二区三区| 欧美日韩中文字幕一区二区| 成人av资源下载| 国产成人精品在线看| 一级女性全黄久久生活片免费| 日本不卡免费在线视频| 亚洲精品国产一区二区精华液| 黄页视频在线91| 亚洲高清中文字幕| 欧美一区二区黄| 欧美人xxxx| 国产.欧美.日韩| 日韩一区二区三区在线观看| av电影天堂一区二区在线| 久久精品噜噜噜成人av农村| 亚洲一二三区在线观看| 中文字幕一区视频| 国产色婷婷亚洲99精品小说| 欧美www视频| 欧美一二三在线| 欧美四级电影网| 色一区在线观看| 99精品黄色片免费大全| 亚洲国产欧美日韩另类综合| 亚洲女与黑人做爰| 国产精品护士白丝一区av| 国产欧美日韩不卡免费| 国产精品国产三级国产三级人妇| 久久久精品综合| 国产精品卡一卡二| √…a在线天堂一区| 亚洲女与黑人做爰| 亚洲福利一区二区| 日本亚洲欧美天堂免费| 男人的天堂亚洲一区| 国产一区二区三区美女| 国产精品一区二区在线播放| 丁香六月综合激情| 91蜜桃视频在线| 欧美日韩一区视频| 精品国产乱码久久久久久久久 | 日韩黄色免费电影| 日本vs亚洲vs韩国一区三区二区 | 欧美专区亚洲专区| 精品视频免费在线| 久久综合久久综合亚洲| 国产精品久久久久久久久搜平片 | 国产一区二区三区精品视频| 99在线热播精品免费| 欧美日韩精品系列| 久久精品欧美一区二区三区不卡 | 色88888久久久久久影院野外| 在线观看国产精品网站| 3751色影院一区二区三区| 国产欧美一区二区精品久导航| 亚洲欧美另类在线| 国产乱码精品一区二区三| 欧洲精品视频在线观看| 久久蜜桃av一区精品变态类天堂 | 欧美日韩一区二区不卡| 26uuu欧美| 亚洲国产精品一区二区www| 国产麻豆视频一区二区| 欧美做爰猛烈大尺度电影无法无天| 在线成人小视频| 亚洲欧美电影一区二区| 麻豆91在线播放免费| 91老司机福利 在线| 久久久综合精品| 青娱乐精品视频| 欧美日韩视频第一区| 成人欧美一区二区三区白人| 久久99深爱久久99精品| 欧美日韩精品一区二区三区四区 | 欧美夫妻性生活| 欧美高清在线精品一区| 美女mm1313爽爽久久久蜜臀| 色先锋久久av资源部| 久久日一线二线三线suv| 日韩精品一二三| 色狠狠一区二区| 中文字幕一区二区三区在线观看| 精品一区二区三区蜜桃| 日韩三级高清在线| 亚洲成年人网站在线观看| 欧洲生活片亚洲生活在线观看| 亚洲欧美自拍偷拍色图| 成人福利在线看| 国产精品久久午夜| 成人av第一页| 最好看的中文字幕久久| 99久久国产免费看| 国产精品美女久久久久av爽李琼 | 国产精品私人自拍| 国产福利不卡视频| 国产精品美女久久福利网站| 91天堂素人约啪| 亚洲精品国产无天堂网2021| 色激情天天射综合网| 亚洲最快最全在线视频| 欧美三级电影在线看| 亚洲一区二区视频| 6080午夜不卡| 久久国产精品72免费观看| 久久免费视频一区| 99久久国产免费看| 亚洲国产中文字幕| 欧美一二三四区在线| 国产自产2019最新不卡| 中文字幕精品—区二区四季| 成人午夜电影久久影院| 亚洲欧洲综合另类在线| 欧美夫妻性生活| 国产综合色精品一区二区三区| 国产精品的网站| 色婷婷av一区二区三区大白胸| 亚洲视频一区二区在线| 欧美日韩国产综合一区二区| 国产在线不卡视频| 亚洲综合视频网| 欧美大黄免费观看| 99久久精品国产一区二区三区| 亚洲图片有声小说| 久久免费看少妇高潮| 欧美四级电影网| 国产白丝精品91爽爽久久| 亚瑟在线精品视频| 国产欧美日韩麻豆91| 欧美自拍丝袜亚洲| 国产不卡在线一区| 视频一区欧美日韩| 国产精品天美传媒| 欧美一区二区三区视频在线观看| 黑人巨大精品欧美黑白配亚洲| 亚洲免费观看高清完整版在线观看| 精品视频一区三区九区| 高清在线不卡av| 老司机一区二区| 亚洲最新在线观看| 国产婷婷精品av在线| 欧美美女直播网站| 91伊人久久大香线蕉| 久久99精品国产麻豆不卡| 亚洲激情五月婷婷| 日本一区二区免费在线| 欧美精品色一区二区三区| 99re这里都是精品| 国产激情偷乱视频一区二区三区| 亚洲成人你懂的| 国产精品不卡视频| 国产女同性恋一区二区| 精品999久久久| 91精品国产色综合久久不卡蜜臀 | 亚洲三级小视频| 久久综合色之久久综合| 日韩视频一区二区| 在线一区二区三区四区| 成人中文字幕电影| 国产一区二区视频在线播放| 人人超碰91尤物精品国产| 亚洲高清视频在线| 亚洲成av人片一区二区三区| 亚洲色图第一区| 亚洲欧美日韩在线| 亚洲一区在线观看网站|