日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

yii输出mysql查询日志_Yii2框架设置错误日志输出到日志或数据库

發布時間:2023/12/4 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 yii输出mysql查询日志_Yii2框架设置错误日志输出到日志或数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

設置Yii的錯誤日志,可按照設置錯誤級別輸入到日志或數據庫中。

對yii\log\FileTarget做了重寫。

1、設置common/config/main.php

$db = require(__DIR__ . '/db.php');

return [

'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',

'bootstrap' => ['log'],

'components' => [

'cache' => [

'class' => 'yii\caching\FileCache',

],

'db' => $db,

'log' => [

'targets' => [

[

'class' => 'yii\log\FileTarget',

'levels' => ['error', 'warning', 'info'],

],

[

// 'class' => 'yii\log\FileTarget',

'class' => 'app\common\components\FileTarget',

'levels' => ['error'],

'logFile' => '@runtime/logs/error.log',

],//日志入庫

],

],

],

'timeZone' => 'Asia/Shanghai',

];

2、app\common\components\FileTarget

namespace app\common\components;

use yii\helpers\VarDumper;

use yii\log;

class FileTarget extends log\FileTarget

{

public function export()

{

parent::export(); // TODO: Change the autogenerated stub

//調用接口將數據入庫 默認是收集錯誤日志

if (empty(\Yii::$app->params['errorLog']['switch'])) {//設置參數是否收集錯誤日志

$flag = false;

if (empty($_SERVER['DOCUMENT_ROOT'])) {

$projectName = '';

$entrance = 'console';

$flag = true;

} else {

$document_root = explode('/', $_SERVER['DOCUMENT_ROOT']);

$projectName = $document_root[count($document_root) - 3];//項目名稱

$entrance = $document_root[count($document_root) - 2];//項目入口

}

$params = $_POST ?: $_GET;

$errList = [];

foreach ($this->messages as $message) {

list($text, $level, $category, $timestamp) = $message;

if ($level <> 4) {

if (!is_string($text)) {

// exceptions may not be serializable if in the call stack somewhere is a Closure

if ($text instanceof \Throwable || $text instanceof \Exception) {

$text = (string)$text;

} else {

$text = VarDumper::export($text);

}

}

if ($flag) {

$dir1 = '/var/www/html/';

$start = strpos($text, $dir1);

if (!$start) {

$dir1 = '/disk/html/';

$start = strpos($text, $dir1);

$project = substr($text, $start strlen($dir1), 50);

$project = explode('/', $project);

$projectName = $project[0];

} else {

$project = substr($text, $start strlen($dir1), 50);

$project = explode('/', $project);

$projectName = $project[0];

}

}

$text = $text . "\n" . "params:" . json_encode($params);

$errType = 'error';

if (stripos($category, 'db')) {

$errType = 'db';

} else if (stripos($text, 'Redis')) {

$errType = 'redis';

}

$item = [];

$item[] = empty($projectName) ? '0' : $projectName;//項目

$item[] = empty($entrance) ? '0' : $entrance;//入口

$item[] = empty($_SERVER['SERVER_NAME']) ? '0' : $_SERVER['SERVER_NAME'];

$item[] = $level;

$item[] = $category;

$item[] = $timestamp;

$item[] = $this->getMessagePrefix($message);

$item[] = IPUtils::get_local_ip();

$item[] = empty($_SERVER['REQUEST_URI']) ? '0' : $_SERVER['REQUEST_URI'];

$item[] = $errType;

$item[] = $text;//錯誤信息

$errList[] = $item;

}

}

//請求接口入庫

$this->collectErrorLog($errList);

}

}

/**

* @param $data

* @return mixed

* 錯誤日志入庫

*/

private function collectErrorLog($data)

{

if (empty(\Yii::$app->params['errorLog']['logApiDomain'])) {

if (YII_ENV == 'local' || YII_ENV == 'dev') {

$url = 'http://dev.api.log.3ttech.cn/inner/collect-error-log?';

} else {

$url = 'http://api.log.3ttech.cn/inner/collect-error-log?';

}

} else {

$url = \Yii::$app->params['errorLog']['logApiDomain'] . '/inner/collect-error-log?';

}

$requestBody = [

'data' => $data,

];

$url .= http_build_query($requestBody);

$response = json_decode(AHelper::curl_get($url), true);

return $response;

}

}

3、數據表的結構如下:

表字段可按照yii2框架中的字段調整設置。

CREATE TABLE `t_user_logs` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`project` varchar(100) NOT NULL DEFAULT '' COMMENT '項目名稱',

`entrance` varchar(20) NOT NULL DEFAULT '' COMMENT '入口',

`address` varchar(50) NOT NULL DEFAULT '' COMMENT '訪問域名',

`level` varchar(200) NOT NULL DEFAULT '' COMMENT '錯誤級別',

`category` varchar(200) NOT NULL DEFAULT '' COMMENT '類別',

`log_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '日志時間',

`prefix` varchar(200) NOT NULL DEFAULT '' COMMENT '前綴',

`suffix` varchar(200) NOT NULL DEFAULT '' COMMENT '報錯服務器ip',

`request_uri` varchar(100) NOT NULL DEFAULT '' COMMENT '請求路由',

`errType` varchar(20) NOT NULL DEFAULT '4' COMMENT '錯誤類型',

`message` text NOT NULL COMMENT '消息',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8;來源:https://www.icode9.com/content-2-569151.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的yii输出mysql查询日志_Yii2框架设置错误日志输出到日志或数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。