/**
* 框架错误日志记录
*/
public function actionError(){
$error = Yii::$app->errorHandler->exception;
$err_msg = "";
if ($error) {
$code = $error->getCode();
$msg = $error->getMessage();
$file = $error->getFile();
$line = $error->getLine();
$time = microtime(true);
$log = new FileTarget();
$log->logFile = Yii::$app->getRuntimePath() . '/logs/err.log';
$err_msg = $msg . " [file: {$file}][line: {$line}][err code:$code.]".
"[url:{$_SERVER['REQUEST_URI']}][post:".http_build_query($_POST)."]";
$log->messages[] = [
$err_msg,
1,
'application',
$time
];
$log->export();
ApplogService::addErrorLog(Yii::$app->id,$err_msg);
}
$this->renderJs($err_msg);
ApplogService:
<?php
/**
* Created by PhpStorm.
* User: HIAPAD
* Date: 2019/1/7
* Time: 16:45
*/
namespace app\common\Services\applog;
use app\models\log\AppLog;
use app\common\Services\UtilService;
use app\models\log\AppAccessLog;
use Yii;
class ApplogService
{
public static function addErrorLog($appname,$content){
$error = \Yii::$app->errorHandler->exception;
$model_app_logs = new AppLog();
$model_app_logs->app_name = $appname;
$model_app_logs->content = $content;
$model_app_logs->ip = UtilService::getIP();
if (!empty($_SERVER['HTTP_USER_AGENT'])){
$model_app_logs->ua= "[UA:{$_SERVER['HTTP_USER_AGENT']}]";
}
if ($error){
if (method_exists($error,"getName")){
$model_app_logs->err_name = $error->getName();
}
if (isset($error->statusCode)){
$model_app_logs->http_code = $error->statusCode;
}
$model_app_logs->err_code = $error->getCode();
}
$model_app_logs->created_time = date("Y-m-d H:i:s");
$model_app_logs->save(0);
}
public static function addAppLog( $uid = 0 ){
$get_params = \Yii::$app->request->get();
$post_params = \Yii::$app->request->post();
if( isset( $post_params['summary'] ) ){
unset( $post_params['summary'] );
}
$target_url = isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:'';
$referer = Yii::$app->request->getReferrer();
$ua = Yii::$app->request->getUserAgent();
$access_log = new AppAccessLog();
$access_log->uid = $uid;
$access_log->referer_url = $referer?$referer:'';
$access_log->target_url = $target_url;
$access_log->query_params = json_encode(array_merge($get_params,$post_params));
$access_log->ua = $ua?$ua:'';
$access_log->ip = UtilService::getIP();
$access_log->created_time = date("Y-m-d H:i:s");
return $access_log->save(0);
}
}
数据库结构:
#用户访问记录表
DROP TABLE IF EXISTS `app_access_log`;
CREATE TABLE `app_access_log` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`uid` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'uid',
`referer_url` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '当前访问的refer',
`target_url` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '访问的url',
`query_params` TEXT NOT NULL COMMENT 'get和post参数',
`ua` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '访问ua',
`ip` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '访问ip',
`note` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT 'json格式备注字段',
`created_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_uid` (`uid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='用户访问记录表';
#错误信息表
DROP TABLE IF EXISTS `app_log`;
CREATE TABLE `app_log` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`app_name` VARCHAR(30) NOT NULL DEFAULT '' COMMENT 'app 名字',
`err_name` VARCHAR(50) NOT NULL DEFAULT 'NOT SET',
`http_code` INT(11) NOT NULL DEFAULT '0',
`err_code` INT(11) NOT NULL DEFAULT '0',
`ip` VARCHAR(20) NOT NULL,
`ua` VARCHAR(200) NOT NULL,
`content` LONGTEXT NOT NULL COMMENT '日志内容',
`created_time` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '插入时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='app错误日表';