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框架设置错误日志输出到日志或数据库相关推荐
- php 输出mysql查询结果_php如何输出mysql查询结果
php输出mysql查询结果的方法:首先,用navicat创建一个新的数据库,并创建一个新的表表2::然后在表2中添加新数据,并使用[mysql_connect]函数与页面中的数据库建立连接:然后选择 ...
- php 输出mysql_php如何输出mysql查询结果
php输出mysql查询结果的方法:首先用navicat新建数据库,并新建表table2:然后在table2中添加新数据,并在页面中用[mysql_connect]函数与数据库建立连接:接着选择要查询 ...
- yii mysql 查询 类型转换_yii2.0数据库查询修改等方法
yii2.0学习有一段时间了,给大家分享一下一些简单的查询等如何操作. 查询:(这里最前面的Test是引用的模型名) Test::find()->all();此方法返回所有数据: Test::f ...
- yii mysql 查询 类型转换_Yii2.0 API改造(返回数据库对应字段数据类型)
namespace common\ext;useYii;useyii\base\InvalidConfigException;useyii\base\NotSupportedException;use ...
- MySql 查询时 为NULL 设置默认值
我们在查询MySql 数据库时,如果使用比较复杂的查询方式,查询结果有时候会为空(NULL). 大多数时候,我们会希望他有一个默认值. 对于这个默认值,一种办法是查询完成后用编程语言给他赋默认值. 然 ...
- mysql查询结果某个字段设置为固定值_MySQL使用select查询时,在查询结果中增加一个字段并指定固定值...
假设需求是这样的: mysql> desc user; +-------+----------+------+-----+---------+----------------+ | Field ...
- php输出mysql查询结果_PHP简单获取数据库查询结果并返回JSON
header("Content-type:text/html;charset=utf-8"); //连接数据库 $con = mysql_connect("localho ...
- php输出mysql查询,MySQL查询和PHP输出
我有2个表,我想知道groupid = 1中有多少用户,并将该组中的所有成员打印到数组中. groups table userid groupid 1 1 2 1 3 1 4 2 5 2 users ...
- 黄聪:Wordpress程序Mysql查询导致CPU100%,页面错误增量飙高解决方案
最近做的网站,访客一多,CPU就会飙到100%,找了网上很多解决方案,用了下面的方法进行优化: 1.mysql开启慢查询方法: 在my.ini的[mysqld]添加如下语句: log-slow-que ...
最新文章
- java实现将pdf变成一张图片在页面显示
- docker小技巧-清理未使用空间
- 机器学习之sklearn——聚类
- urllib2.HTTPError: HTTP Error 403: Forbidden的解决方案
- python 安装 pip,setuptools
- 【MFC两种视频图像採集方法】DirectShow与Opencv
- Linux-文件查找
- Python:if语句
- [转载] flutter开发桌面程序_在开始使用Flutter开发应用程序之前要了解的5条提示
- 如何将SWF的FLASH转成GIF动态图片呢.
- php edm 系统,edm.php · 那些年我们一起/fanwe - Gitee.com
- 云操作系统OpenStack 优势与问题并存
- andriod studio 卡在wating for target device to come
- 深入研究simulink建模与仿真之信号线上的几种不同的图标
- 微机原理和计算机组成原理一样吗_计算机组成原理(指令)
- 腾讯地图标注_在腾讯地图上标注店铺,只需要简单几步就搞定
- matlab中标幺值,标幺值概述
- [转载]学习 codota的使用
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day21】—— Linux命令
- 情人节翻译软件测试,情人节甜蜜制造机|互动装置干货精选
热门文章
- encodingaeskey java,消息体签名与加解密-开发者QA
- java怎么实现同步到微博功能_新浪微博信息站外同步的完整实现
- 花季少女竟然有个三年级老公??!
- 你的女神今日结婚了!!!你失恋了......
- 复工之后,如何让自己的时间更值钱
- php 身份认证服务,PHP的HTTP身份认证
- 大数据财税与python应用_大数据跟python
- android studio 创建.9文件,自己使用Android studio创建.9(点9)图片
- linux lua socket编程,CentOs 安装lua,luasocket
- JAVA中pin什么意思_java语言中的多态概述